【问题标题】:Java EE 6 CDI: @Injected field of a @Injected field is nullJava EE 6 CDI:@Injected 字段的 @Injected 字段为空
【发布时间】:2014-06-04 01:52:09
【问题描述】:
我在这里整理了一个小示例应用程序:https://github.com/lakamsani/cdi-nested
MyResource 是一个 JAX-RS 服务,MyService 是 @Injected
MyDao 反过来 @Injected 到 MyService 中。当我运行它时(在 TomEE 1.6.0.1 中),MyDao 在注入到 MyResource 的 MyService 实例中为空。我需要做什么才能使其工作,或者是否有另一种方法(没有显式实例化对象)。
【问题讨论】:
标签:
java-ee-6
cdi
apache-tomee
【解决方案1】:
我认为您看到的是 MyService 的代理实例被注入 MyResource。一旦你在 MyService 上调用了一个方法,就会从正确的上下文中获取一个真实的实例,然后将其注入 MyDao。
如果在注入 MyResource 时确实需要 MyService 的“真实”实例,则可以将 MyService 设置为依赖范围的 cdi bean,而不是 @Stateless EJB。
我可能误解了为什么您需要在调用任何业务方法之前将 MyDao 注入 MyService。