GlassFish、CDI 和构造函数注入
GlassFish 3.1 的托管 bean 的 CDI 实现是否支持构造函数注入?我有一个 @Singleton EJB,我想使用构造函数注入向其中注入另一个托管 Bean(包含在同一 EJB 模块中)。现场注入确实有效。但是通过构造函数注入,我从 AbstractSingletonContainer
得到一个 NullPointerException
。
这有效:
@Singleton
public class FooBean implements Foo {
@Inject private BarBean bar;
}
这不起作用:
@Singleton
public class FooBean implements Foo {
private final BarBean bar;
@Inject
public FooBean(BarBean bar) {
this.bar = bar;
}
}
Is constructor injection supported in GlassFish 3.1's implementation of CDI for managed beans? I have a @Singleton
EJB into which I want to inject another managed bean (contained in the same EJB module) using constructor injection. Field injection does work. But with constructor injection I get a NullPointerException
from AbstractSingletonContainer
.
This does work:
@Singleton
public class FooBean implements Foo {
@Inject private BarBean bar;
}
This does not work:
@Singleton
public class FooBean implements Foo {
private final BarBean bar;
@Inject
public FooBean(BarBean bar) {
this.bar = bar;
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
CDI 支持直接字段注入、初始化方法参数注入和构造函数参数注入。来自CDI 1.0规范:
我想知道您的问题是否可能与 WELD-141 有关。
参考
CDI does support direct field injection, initializer method parameter injection and constructor parameter injection. From the CDI 1.0 specification:
I wonder if your problem could be related to WELD-141 though.
References
GlassFish 3.x 支持构造函数注入,但您必须提供默认构造函数才能满足 EJB 规范。
这将起作用:
但是 Glassfish(这部分取决于容器)将在注入的构造函数之前调用默认构造函数。
Constructor injection is supported in GlassFish 3.x but you must provide a default constructor anyway to satisfy EJB specs.
This will work:
but Glassfish (this part is container dependant) will call the default constructor before the Injected one.