我正在使用 CDI 1.0 的 Weld 实现,但我找不到如何让 bean 像在 Spring 中一样懒惰(使用@Lazy
或lazy-init
在 XML 中)。有没有办法告诉 CDIInjector
在启动时不要初始化 bean?
问问题
3977 次
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 回答