Ton*_*oni 5 dependency-injection glassfish constructor-injection cdi java-ee-6
GlassFish 3.1的托管bean的CDI实现是否支持构造函数注入?我有一个@SingletonEJB,我想使用构造函数注入注入另一个托管bean(包含在同一个EJB模块中).现场注入确实有效.但随着构造器注入我收到了NullPointerException从AbstractSingletonContainer.
这确实有效:
@Singleton
public class FooBean implements Foo {
@Inject private BarBean bar;
}
Run Code Online (Sandbox Code Playgroud)
这不起作用:
@Singleton
public class FooBean implements Foo {
private final BarBean bar;
@Inject
public FooBean(BarBean bar) {
this.bar = bar;
}
}
Run Code Online (Sandbox Code Playgroud)
CDI确实支持直接场注入,初始化方法参数注入和构造函数参数注入.从CDI 1.0规范:
3.7.Bean构造函数
当容器实例化bean类时,它会调用bean构造函数.bean构造函数是bean类的构造函数.
应用程序可以直接调用bean构造函数.但是,如果应用程序直接实例化bean,则容器不会将任何参数传递给构造函数; 返回的对象不绑定任何上下文; 容器没有注入依赖关系; 并且容器不管理新实例的生命周期.
3.7.1.声明一个bean构造函数
可以通过注释构造函数来标识bean构造函数
@Inject.Run Code Online (Sandbox Code Playgroud)@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函数,则不接受任何参数的构造函数是bean构造函数.如果bean类具有多个带注释
@Inject的构造函数,则容器会自动检测问题并将其视为定义错误.如果bean构造函数具有注释参数
@Disposes,或者@Observes容器会自动检测问题并将其视为定义错误.bean构造函数可以包含任意数量的参数.bean构造函数的所有参数都是注入点.
我想知道你的问题是否与WELD-141有关.
| 归档时间: |
|
| 查看次数: |
10115 次 |
| 最近记录: |