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

Xor*_*rty 6 spring cdi lazy-initialization

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

Lig*_*ard 7

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


Jan*_*ski 6

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

运用

 @Inject
Instance<MyObject> object;
Run Code Online (Sandbox Code Playgroud)

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


小智 5

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

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