如何使CDI bean懒洋洋地初始化?

时间:2012-09-27 21:47:13

标签: spring cdi lazy-initialization

我正在使用CDI 1.0的Weld实现,我无法找到如何在Spring中使用bean的方式(在XML中使用@Lazylazy-init)。有没有办法告诉CDI的Injector不要在启动时初始化bean?

3 个答案:

答案 0 :(得分:7)

不,这在CDI中是不可能的。您可以获得的最接近的事情是创建一个新的InjectionPoint(使用扩展)实现,该实现提供代理,代理将初始化第一个方法调用的所有内容。

答案 1 :(得分:5)

请参阅我的回答:http://www.adam-bien.com/roller/abien/entry/lazy_injection_with_javax_inject

使用

 @Inject
Instance<MyObject> object;

只在需要时才初始化bean ...不是你想要的吗?

答案 2 :(得分:2)

如果您注入的bean处于正常范围(@SessionScoped,@ RequestScoped等),它将被懒惰地实例化。您在客户端bean中获得的是一个代理,在您第一次在代理上调用方法之前,该代理不会指向具体实例。

正如其他人已经指出的那样,@Inject Instance<MyBean> myBeanInstance;也可用于建立一个明确的惰性实例化。