6

我正在使用 CDI 1.0 的 Weld 实现,但我找不到如何让 bean 像在 Spring 中一样懒惰(使用@Lazylazy-init在 XML 中)。有没有办法告诉 CDIInjector在启动时不要初始化 bean?

4

3 回答 3

8

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

使用

 @Inject
Instance<MyObject> object;

bean 仅在需要时才初始化……这不是您想要的吗?

于 2013-04-11T11:36:10.467 回答
7

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

于 2012-09-27T22:35:47.073 回答
4

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

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

于 2015-11-09T09:13:37.450 回答