복붙노트

[SPRING] lazily 초기화 된 CDI 빈을 만드는 방법은?

SPRING

lazily 초기화 된 CDI 빈을 만드는 방법은?

나는 CDI 1.0의 Weld 구현을 사용하고 있으며 Spring에서 lazy와 같은 방법을 찾을 수 없다 (XML에서 @Lazy 또는 Lazy-init 사용). 시작시 Bean을 초기화하지 않도록 CDI의 Injector에게 알려주는 방법이 있습니까?

해결법

  1. ==============================

    1.아닙니다. CDI에서는 불가능합니다. 당신이 얻을 수있는 가장 가까운 것은 프록시를 제공하는 새로운 InjectionPoint (Extension 사용) 구현체를 생성하는 것이며 프록시는 첫 번째 메소드 호출시 모든 것을 초기화합니다.

    아닙니다. CDI에서는 불가능합니다. 당신이 얻을 수있는 가장 가까운 것은 프록시를 제공하는 새로운 InjectionPoint (Extension 사용) 구현체를 생성하는 것이며 프록시는 첫 번째 메소드 호출시 모든 것을 초기화합니다.

  2. ==============================

    2.내 대답보기 : http://www.adam-bien.com/roller/abien/entry/lazy_injection_with_javax_inject

    내 대답보기 : http://www.adam-bien.com/roller/abien/entry/lazy_injection_with_javax_inject

    사용

     @Inject
    Instance<MyObject> object;
    

    빈은 필요할 때만 초기화됩니다 ... 당신이 원하는 것이 아닙니다.

  3. ==============================

    3.주입중인 bean이 정상적인 범위 (@SessionScoped, @RequestScoped 등)에 있다면, 느리게 인스턴스화됩니다. 클라이언트 빈에서 얻는 것은 처음으로 프록시에서 메소드를 호출 할 때까지 구체 인스턴스를 가리 키지 않는 프록시입니다.

    주입중인 bean이 정상적인 범위 (@SessionScoped, @RequestScoped 등)에 있다면, 느리게 인스턴스화됩니다. 클라이언트 빈에서 얻는 것은 처음으로 프록시에서 메소드를 호출 할 때까지 구체 인스턴스를 가리 키지 않는 프록시입니다.

    다른 사람들이 이미 지적했듯이, @Inject Instance myBeanInstance; 명시 적으로 게으른 인스턴스화를 설정하는 데 사용할 수도 있습니다.

  4. from https://stackoverflow.com/questions/12630508/how-to-make-a-cdi-bean-lazily-initialized by cc-by-sa and MIT license