GlassFish 3.1 的托管 bean 的 CDI 实现是否支持构造函数注入?我有一个@Singleton
我想使用构造函数注入向其中注入另一个托管 bean(包含在同一 EJB 模块中)的 EJB。现场注入确实有效。但是通过构造函数注入我得到了NullPointerException
from AbstractSingletonContainer
.
这确实有效:
@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;
}
}
CDI 支持直接字段注入、初始化方法参数注入和构造函数参数注入。来自CDI 1.0规范:
3.7. Bean 构造函数
当容器实例化一个bean时
类,它调用豆
构造函数。 bean 构造函数是
bean 类的构造函数。
应用程序可以调用bean
直接构造函数。然而,如果
应用程序直接实例化
bean,没有参数传递给
由容器构造函数;这
返回的对象未绑定到任何
语境;没有注入任何依赖项
通过容器;和生命周期
新实例不受管理
容器。
3.7.1.声明一个 bean 构造函数
bean构造函数可以被识别
通过注释构造函数@Inject
.
@SessionScoped
public class ShoppingCart implements Serializable {
private User customer;
@Inject
public ShoppingCart(User customer) {
this.customer = customer;
}
public ShoppingCart(ShoppingCart original) {
this.customer = original.customer;
}
ShoppingCart() {}
...
}
@ConversationScoped
public class Order {
private Product product;
private User customer;
@Inject
public Order(@Selected Product product, User customer) {
this.product = product;
this.customer = customer;
}
public Order(Order original) {
this.product = original.product;
this.customer = original.customer;
}
Order() {}
...
}
如果 Bean 类没有显式地
使用声明构造函数@Inject
,
不接受 no 的构造函数
参数是bean构造函数。
如果一个 Bean 类有多个
构造函数注释@Inject
, 这
容器自动检测
问题并将其视为定义
错误。
如果 bean 构造函数有参数
带注释的@Disposes
, or @Observes
,
容器自动检测
问题并将其视为
定义错误。
一个bean构造函数可以有任意数量
参数。 a的所有参数
bean 构造函数是注入点。
我想知道你的问题是否与WELD-141 though.
参考
- CDI 1.0 specification
- Weld Documentation
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)