Search
Duplicate
🧳

@Lazy

일반적으로 어플리케이션이 시작하면 스프링은 모든 빈들을 의존성 주입을 통해 사용가능한 상태로 생성한다.
지연 초기화는 모든 빈을 미리 만드는 대신 지연 초기화를 지정할 수 있다. 이 경우 빈들은 다음의 경우에만 초기화된다.
의존성 주입을 위해 필요한 경우
명시적으로 요청되는 경우
해당 클래스들에 @Lazy 어노테이션을 사용해 이를 표시할 수도 있으며 광범위한 경우 전역 설정 속성을 수정(spirng.main.lazy-intialization=true)하여 적용시킬 수 있다.
프로토타입 범위의 빈의 경우, 동작 구조자체가 Lazy이므로 @Lazy 어노테이션을 사용할 필요가 없다.

장점

오직 필요한 객체들만 생성할 수 있다.
많은 구성요소를 가지고 있는 경우 시작 시간을 줄일 수 있다.

단점

@RestController과 같은 Web 관련 구성요소 Bean들은 실제로 요청이 발생하기 전까지 생성되지 않는다.
설정 이슈들이 초기화되기 전까지 드러나지 않는다.
모든 빈들이 생성되기에 충분한 메모리를 가지고 있는지 확실하게할 필요가 있다.