Loading...
Spring Framework Reference Documentation 7.0.2의 Lazy-initialized Beans의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
기본적으로 ApplicationContext 구현은 초기화 과정의 일부로 모든
singleton bean을 즉시 생성하고 구성합니다. 일반적으로 이러한 사전 인스턴스화는 구성이나 주변 환경의 오류를 몇 시간 또는 며칠 후가 아니라 즉시 발견할 수 있으므로 바람직합니다.
이 동작이 바람직하지 않은 경우, bean 정의를 lazy-initialized로 표시하여 singleton bean의 사전 인스턴스화를 방지할 수 있습니다. lazy-initialized bean은 IoC 컨테이너에 startup 시점이 아니라 처음 요청될 때 bean 인스턴스를 생성하도록 지시합니다.
이 동작은 @Lazy 어노테이션 또는 XML에서 <bean/> element의 lazy-init attribute로 제어되며, 다음 예제와 같습니다:
1@Bean 2@Lazy 3ExpensiveToCreateBean lazy() { 4 return new ExpensiveToCreateBean(); 5} 6 7@Bean 8AnotherBean notLazy() { 9 return new AnotherBean(); 10}
1@Bean 2@Lazy 3fun lazy(): ExpensiveToCreateBean { 4 return ExpensiveToCreateBean() 5} 6 7@Bean 8fun notLazy(): AnotherBean { 9 return AnotherBean() 10}
1<bean id="lazy" class="com.something.ExpensiveToCreateBean" lazy-init="true"/> 2 3<bean name="notLazy" class="com.something.AnotherBean"/>
앞의 구성이 ApplicationContext에 의해 사용될 때, lazy bean은
ApplicationContext가 시작될 때 즉시 사전 인스턴스화되지 않는 반면,
notLazy bean은 즉시 사전 인스턴스화됩니다.
그러나 lazy-initialized bean이 lazy-initialized가 아닌 singleton bean의 의존성인 경우,
ApplicationContext는 singleton의 의존성을 충족해야 하기 때문에 startup 시점에 lazy-initialized bean을 생성합니다. lazy-initialized bean은 lazy-initialized가 아닌 다른 곳의 singleton bean에 주입됩니다.
또한 @Configuration 어노테이션이 있는 class에 @Lazy 어노테이션을 사용하거나 XML에서 <beans/> element의 default-lazy-init attribute를 사용하여 bean 집합에 대한 lazy-initialization을 제어할 수도 있으며, 다음 예제와 같습니다:
1@Configuration 2@Lazy 3public class LazyConfiguration { 4 // No bean will be pre-instantiated... 5}
1@Configuration 2@Lazy 3class LazyConfiguration { 4 // No bean will be pre-instantiated... 5}
1<beans default-lazy-init="true"> 2 3 <!-- No bean will be pre-instantiated... --> 4</beans>
Using depends-on
Autowiring Collaborators