복붙노트

[SPRING] Spring 3 빈 인스턴스화 시퀀스

SPRING

Spring 3 빈 인스턴스화 시퀀스

어쨌든 bean을 인스턴스화 할 순서를 지정합니까? 즉, 특정 빈이 다른 빈들보다 먼저 인스턴스화되도록하기를 원한다.

Spring 3.2와 annotation 기반 선언 메소드를 사용하고 있습니다.

해결법

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

    1.bean A가 , @Autowired 또는 를 정의함으로써 bean B에 의존하면, 그 순서는 Spring 컨테이너에 의해 강제되고 고정된다. 여기에 문제 없습니다.

    bean A가 , @Autowired 또는 를 정의함으로써 bean B에 의존하면, 그 순서는 Spring 컨테이너에 의해 강제되고 고정된다. 여기에 문제 없습니다.

    그러나 명시 적 종속성을 통해 표현되지 않는 bean 작성의 특정 순서를 적용하려면 다음을 사용하십시오.

    <bean id="A" depends-on="B"/>
    <bean id="B"/>
    

    이상 (주석을 사용하면 @Bean Java 설정에서도 작동 함) :

    @Service
    @DependsOn("B")
    public class A {}
    

    또는 더 나은 ... 그것을 사용하지 마십시오. 이러한 구문은 코드 냄새이며 종종 구성 요소간에 보이지 않는 종속성이 있음을 제안합니다.

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

    2.Tomasz가 제공 한 답변에 동의합니다. 만약 콩 A가 콩 B에 의존한다는 것을 안다면, 이것은 올바른 접근법입니다.

    Tomasz가 제공 한 답변에 동의합니다. 만약 콩 A가 콩 B에 의존한다는 것을 안다면, 이것은 올바른 접근법입니다.

    때로는 모든 bean 인스턴스화 전에 실행해야하는 논리가 있습니다. 이 경우 BeanFactoryPostProcessor를 사용할 수 있습니다. Spring은 처음에는 BeanFactoryPostProcessors를 생성하고 실행한다. 동시에 BeanFactoryPostProcessor가 일부 bean A에 종속되면 특성 또는 생성자 주입을 사용할 수 있습니다. 이 경우 Spring은 먼저 BeanFactoryPostProcessor를 호출하고 BeanFactoryPostProcessor를 호출하고 그 후에 BeanFactoryPostProcessor를 호출하면 컨텍스트에서 다른 모든 Bean을 시작한다.

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

    3.Bean의 Ordered 인터페이스를 사용하여 다른 Bean과 관련된 순서를 정의 할 수 있습니다.

    Bean의 Ordered 인터페이스를 사용하여 다른 Bean과 관련된 순서를 정의 할 수 있습니다.

  4. ==============================

    4.또한 emanedov가 BeanFactoryPostProcessor를 사용하면 BeanFactoryPostProcessor 인스턴스 시퀀스를 제어하도록 Ordered 인터페이스를 구현할 수 있습니다.

    또한 emanedov가 BeanFactoryPostProcessor를 사용하면 BeanFactoryPostProcessor 인스턴스 시퀀스를 제어하도록 Ordered 인터페이스를 구현할 수 있습니다.

  5. from https://stackoverflow.com/questions/13770225/spring-3-bean-instantiation-sequence by cc-by-sa and MIT license