기본적으로, ApplicationContext 구현체들은 초기화 과정 중에 싱글턴 bean들을 열심히 만들어낸다. 일반적으로 이런 사전 인스턴스화는 바람직하다. 설정이나 환경적인 에러들이 즉시 발견되기 때문이다. 하지만 이런 활동이 바람직하지 않은 경우에는 bean을 lazy-initialized라고 표시하여 사전 인스턴스화를 막을 수 있다. lazy-initialized bean은 IoC 컨테이너에게 startup될 때가 아니라 요청 받았을때 자신을 만들게끔 한다.
XML에서 이 행동은 <bean/>요소의 'lazy-init' 속성을 통해 제어된다. 다음 예시를 참고하라.
<bean id="lazy" class="com.something.ExpensiveToCreateBean" lazy-init="true" />
<bean name="not.lazy" class="com.something.AnotherBean" />
위 설정은 ApplicationContext가 사용한다. ApplicationContext가 시작할 때, 'not.lazy' bean은 사전 인스턴스화 되지만 'lazy' bean은 사전 인스턴스화되지 않는다.
그러나 lazy-initialized bean이 lazy-initialized가 아닌 싱글턴 bean의 의존성이라면, ApplicationContext는 lazy-initialized bean을 시작할 때 만들어버린다. 왜냐하면 싱글턴의 의존성을 만족시켜줘야 하기 때문이다. lazy-initialized bean은 lazy-initialized하지 않은 싱글턴 bean들에게 주입된다.
<bean/> 요소의 'default-lazy-init' 속성을 사용하면 컨테이너 레벨에서도 lazy-initialization을 제어할 수 있다. 다음 예시를 참고하라.
<beans default-lazy-init="true">
<!-- 어떤 bean도 사전 인스턴스화되지 않는다 -->
</beans>
'SpringFramework Core - I. IoC 컨테이너 > 4. 의존성' 카테고리의 다른 글
4.5.1. Autowiring의 한계와 단점 (0) | 2020.03.18 |
---|---|
4.5. 협력자들 Autowiring하기 (0) | 2020.03.18 |
4.3. depends-on 사용하기 (0) | 2020.03.18 |
4.2.12. 복합적인 Property 이름들 (0) | 2020.03.17 |
4.2.11. c-namespace를 사용한 XML Shortcut (0) | 2020.03.17 |