문제

I am using Weld implementation of CDI 1.0 and I cannot find way how to make bean lazy like in Spring (using @Lazy or lazy-init in XML). Is there a way how to tell CDI's Injector not to initialize bean on startup?

도움이 되었습니까?

해결책

No, this isn't possible in CDI. The closest thing you could get would be to create a new InjectionPoint (using an Extension) implementation that gives a proxy and the proxy would initialize everything on the first method invocation.

다른 팁

See my answer on: http://www.adam-bien.com/roller/abien/entry/lazy_injection_with_javax_inject

Using

 @Inject
Instance<MyObject> object;

the bean is initialized only when needed ... isn't that what you want?

If the bean you're injecting is in a normal scope (@SessionScoped, @RequestScoped etc), it will be lazily instantiated. What you get in your client bean is a proxy that doesn't point to a concrete instance until the first time you invoke a method on the proxy.

As others have already pointed out, @Inject Instance<MyBean> myBeanInstance; can also be used to establish an explicit lazy instantiation.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top