我在Java SE应用程序中使用CDI(Weld).我做了一个Bean让我们称之为BeanA.
public class BeanA {
@PostConstruct
public void init() {
System.out.println("INIT");
}
public void receive(@Observes String test) {
System.out.println("received: " + test);
}
}
Run Code Online (Sandbox Code Playgroud)
在我的测试方法中,我调用:
Weld weld = new Weld();
WeldContainer container = weld.initialize();
Instance<BeanA> instance = container.instance().select(BeanA.class);
BeanA bean = instance.get();
container.event().fire("TEST");
container.event().fire("TEST");
container.event().fire("TEST");
container.event().fire("TEST");
Run Code Online (Sandbox Code Playgroud)
为什么输出是这样的?为什么每次收到事件都会调用@PostConstruct?:
INIT
INIT
recived:TEST
INIT
recived:TEST
INIT
recived:TEST
INIT
recived:TEST
这是因为bean的默认范围是@Dependent.这意味着每次触发事件时,都需要创建一个新的观察者bean实例,以便将偶数发送给它.@PostConstruct作为创建的一部分被调用.
BeanA使用@Singleton将其范围设置为单例来注释您的类型.只为您的容器创建一个.
| 归档时间: |
|
| 查看次数: |
506 次 |
| 最近记录: |