Spring Bean의 생명주기 중 초기화에 대해 정리해보려고 한다.
Spring Bean의 기본값은 즉시 초기화이다.
기본적으로 Spring 컨테이너가 동작할 때, Bean을 초기화시킨다.
위에서 볼 수 있듯이 Bean을 로드하지 않고 Bean에서 메소드를 호출하지 않더라도 Bean이 자동으로 초기화되고 있다.
이러한 Spring을 특성 덕분에 어플리케이션에 오류가 있다면 우리는 어플리케이션을 실행시킴과 동시에 오류를 발견할 수 있다는 장점이 있다.
하지만 어플리케이션이 무겁다면 초기화할 때 많은 시간이 걸릴 것이다.
하지만 우리는 특정 어노테이션을 사용하면 초기화 여부를 선택해줄 수도 있다.
이 때 사용하는 것이 @Lazy
이다.
@Lazy
를 사용하면 자동 초기화가 이루어지지 않는다.
어플리케이션을 동작시켰음에도 콘솔창에 아무일도 이루어지지 않는다는 것을 확인할 수 있다.
그렇다면 @Lazy
를 import한 Bean은 언제 초기화될까?
정답은 사용자가 해당 Bean을 사용할 때이다.
위와 같이 사용되기 바로 전에 로드되어 표시된다.
즉,
@Lazy
는 해당 어노테이션을 import한 Bean을 참조하거나 사용하려 할 때만 로드시키는 기능을 한다.
@Lazy
어노테이션은 @Component
, @Bean
, @Configuration
어디든 사용이 가능하다.
그러나 @Lazy
사용은 그다지 추천하는 바는 아니고, 복잡한 초기화 논리를 가졌을 때 가끔 사용해주면 된다.
@Lazy
어노테이션을 가진 Bean에 오류가 발생한다면 어플리케이션 실행 시에는 전혀 알 수 없으며, 추후 Runtime 에러로 표시됨도 주의하자.