Lazy-initialized Beans

Dev.Hammy·2024년 2월 3일
0

기본적으로 ApplicationContext 구현은 초기화 프로세스의 일부로 모든 싱글톤 Bean을 즉시(eagerly) 생성하고 구성합니다. 일반적으로 이러한 사전 인스턴스화(pre-instantiation)는 구성(configuration)이나 주변 환경의 오류가 몇 시간 또는 며칠 후에 발견되는 것이 아니라 즉시 발견되기 때문에 바람직합니다. 이 동작이 바람직하지 않은 경우에는, Bean 정의를 지연 초기화(lazy-initialized)되는 것으로 표시(mark)하여 싱글톤 Bean의 사전 인스턴스화를 방지할 수 있습니다. 지연 초기화 빈은 시작 시가 아니라 처음 요청될 때 빈 인스턴스를 생성하도록 IoC 컨테이너에 지시합니다.

XML에서 이 동작은 다음 예제와 같이 <bean/> 요소의 lazy-init 속성에 의해 제어됩니다.

<bean id="lazy" class="com.something.ExpensiveToCreateBean" lazy-init="true"/>
<bean name="not.lazy" class="com.something.AnotherBean"/>

이전 구성이 ApplicationContext에 의해 사용되면(consumed), ApplicationContext가 시작될 때 lazy 빈은 즉시 사전 인스턴스화되지 않는 반면, not.lazy 빈은 즉시 사전 인스턴스화됩니다.

그러나 지연 초기화 Bean이 지연 초기화되지 않은 싱글톤 Bean의 종속성인 경우 ApplicationContext는 시작 시 지연 초기화 Bean을 생성합니다. 왜냐하면 싱글톤의 종속성을 충족해야 하기 때문입니다. 지연 초기화 빈은 지연 초기화되지 않은 다른 곳의 싱글톤 빈에 주입됩니다.

다음 예제와 같이 <beans/> 요소의 default-lazy-init 속성(attribute)을 사용하여 컨테이너 수준에서 지연 초기화를 제어할 수도 있습니다.

<beans default-lazy-init="true">
	<!-- no beans will be pre-instantiated... -->
</beans>

0개의 댓글