Spring/Spring

[Spring][Core] 2-7. Bean: Lazy-initialized Beans

noahkim_ 2023. 10. 14. 22:42

1. Lazy-initialized Beans

기본 동작

  • ApplicationContext는 기본적으로 초기화 과정에서 모든 싱글톤 빈을 즉시 생성하고 설정합니다.
    • 즉시 인스턴스화는 설정 오류나 환경 문제가 컴파일 타임에 조기에 발견됩니다.
    • 오류가 서버 기동중에 발견되는 것을 방지할 수 있습니다.

 

지연 초기화(Lazy Initialization)

  • 이러한 기본 동작을 원치 않을 때, 빈 정의 단계에서 지연 초기화로 표시하여 싱글톤 빈의 사전 인스턴스화를 방지할 수 있습니다.
  • IoC 컨테이너에게 지연 초기화 된 빈은 즉시 생성이 아닌 첫 요청시에 생성하도록 지시합니다.

 

XML에서의 설정

  • XML에서 이 동작은 <bean/> 요소의 lazy-init 속성으로 제어됩니다.
<bean id="lazy" class="com.something.ExpensiveToCreateBean" lazy-init="true"/> 
<bean name="not.lazy" class="com.something.AnotherBean"/>

 

예외 사항

지연 초기화 된 빈이 지연 초기화되지 않은 싱글톤 빈의 종속성인 경우
  • 해당 싱글톤 빈의 종속성을 만족시키기 위해, ApplicationContext는 지연 초기화 된 빈을 즉시 생성합니다.

 

컨테이너 수준에서의 지연 초기화

  • 요소의 default-lazy-init 속성을 사용하여 컨테이너 수준에서 지연 초기화를 제어할 수 있습니다.
<beans default-lazy-init="true">
<!-- no beans will be pre-instantiated... --> 
</beans>
  • 이 설정을 사용하면 어떠한 빈도 사전에 인스턴스화되지 않습니다.
  • 필요할 때만 특정 빈을 초기화하여 리소스를 절약하고 시작 시간을 단축시킬 수 있습니다.

 

 

출처