Spring Bean 의 Lazy init에 대해 정리하자.

스프링 ApplicationContext 에 등록된 Bean은
Lazy 설정이 없다면 기동시 등록된다.

Image for post
Image for post

위와 같이 Bean을 설정한 후
context의 getBeanDefinitionNames() 로 현재 등록된 Bean정보를 확인해보면
“eagerTest”와 “lazyTest” 모두 등록되어져 있다.

@Lazy 어노테이션이 적용되어진 Bean의 BeanDefinition 구현체에
isLazyInit이 true라면 BeanFactory에서 singletonObject를 생성하지 않는다.

그러므로.

lazyTest 빈의 경우는 인스턴스가 생성되 있지 않겠다

Image for post
Image for post

“lazyTest”라는 이름의 Bean을 가져오려 할때 빈팩토리에 의해 싱글톤 인스턴스가 생성되어지고 리턴된다.

BeanDefinition 인터페이스의 구현체를통해
context 에 cached되어져 있는 singletonObject가 없다면 생성. !

그렇기 때문에.

non-lazy Bean에서 lazy Bean을 참조한다면 바로 빈의 인스턴스가 생성된다.

엘디는 사랑입니다.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store