Springframework <bean> depends-on 속성

2018. 7. 28. 21:57Web/Spring

<bean>의 depends-on 속성




applicationContext.xml에 빈정의에 대한 설정을 모두 마치고 실행하게 되면 빈의 생성은 선언한 순서대로 생성이 된다.(만약 의존하는 빈이 다른 위치에 있다면 그 빈을 먼저 생성하고 다시 순서대로 내려온다.) 하지만 명시적으로 의존성이 들어나지 않고 암시적으로 빈이 어떠한 다른 빈을 의존하고 있는 경우가 있을 수 있다. 만약 명시적으로 의존이 들어나 있다면 스프링컨테이너는 알아서 순서에 맞춰 빈을 생성해 주지만 암시적으로 겉으로 들어나지 않은 의존성 같은 경우는 컨테이너도 어쩔수가 없다. 


예를 들면, 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<bean id="service"
        class="sample.spring.chapter04.bankapp.service.FixedDepositServiceImpl">
        <property name="fixedDepositDao">
            <bean class="sample.spring.chapter04.bankapp.dao.FixedDepositDaoImpl" />
        </property>
        <constructor-arg index="0"
            value="META-INF/config/appConfig.properties" />
    </bean>
 
    <bean id="eventSenderSelectorService"
        class="sample.spring.chapter04.bankapp.service.EventSenderSelectorServiceImpl">
        <constructor-arg index="0"
            value="META-INF/config/appConfig.properties" />
    </bean>
cs

 

eventSenderSelectorService라는 빈이 생성될때, appConfig.properties 파일에 어떠한 정보를 남겨준다. 그러면 service 빈이 그 appConfig.properties 파일에 작성된 정보를 이용하여 빈생성과정이 이루어진다. 위의 설정파일에서는 암시적으로 service 빈이 eventSenderSelectorService 빈을 의존하고 있는 것이다. 그래서 service 빈이 먼저 생성되는 과정이 된다면? 빈생성 과정에서 오류가 생기고 말것이다. (eventSenderSelectorService 빈 생성이 먼저 이루어져야함으로) 여기서 사용할 수 있는 속성이 depends-on 속성이다.




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<bean id="service"
        class="sample.spring.chapter04.bankapp.service.FixedDepositServiceImpl"
           depends-on="eventSenderSelectorService ">
        <property name="fixedDepositDao">
            <bean class="sample.spring.chapter04.bankapp.dao.FixedDepositDaoImpl" />
        </property>
        <constructor-arg index="0"
            value="META-INF/config/appConfig.properties" />
    </bean>
 
    <bean id="eventSenderSelectorService"
        class="sample.spring.chapter04.bankapp.service.EventSenderSelectorServiceImpl">
        <constructor-arg index="0"
            value="META-INF/config/appConfig.properties" />
    </bean>
cs

이렇게 depends-on으로 의존하고 있는 빈을 들어내줌으로써 eventSenderSelectorService 빈을 먼저 생성한 후에 service 빈을 생성한다.



depends-on속성에는 ","을 구분자로 여러개의 빈을 의존하고 있음을 명시할 수 있다.

하지만 이 속성은 자식 빈정의에는 상속되지 않는 속성임에 주의해야한다.(부모빈에 이 속성이 정의되어 있어도 자식에는 상속되지 않음)