지연 초기화
초기화 작업을 미루다가 사용자가 필요로 할 때 진행하는데, 이 방법을 통해 메모리 낭비를 줄일 수 있다는 장점이 있다. 그리고 이는 퍼포먼스의 향상으로 이어집니다.
이 지연 초기화를 사용할 때에는 @Lazy라는 어노테이션을 통해서 사용을 하게 됩니다.
@Component
class ClassA {
}
@Component
@Lazy // 지연 초기화
class ClassB {
private ClassA classA;
public ClassB(ClassA classA) {
// Logic
System.out.println("Some Initialization logic");
this.classA = classA; // ClassA 초기화
}
public void doSomething(){
System.out.println("Do Something");
}
}
@Configuration
@ComponentScan
public class LazyInitializationLuncherApplication {
public static void main(String[] args) {
try (var context =
new AnnotationConfigApplicationContext
(LazyInitializationLuncherApplication.class))
{
System.out.println("Initialization of context is completed");
context.getBean(ClassB.class).doSomething(); // 이 것이 실행될 때 초기화
}
}
}
즉시 초기화와 지연 초기화
즉시 초기화 | 지연 초기화 | |
초기화 시간 | 어플리 케이션 실행이나 Spring context가 시작될 때 초기화 된다 | 어플리 케이션이 처음 사용될 때 초기화 된다. |
Default | O | X |
사용법 | 기본값이므로 안써도 되고 @Lazy(value=false)로 명시해도 된다. | @Lazy 혹은 @Lazy(value=true) |
초기화 오류 발생시 | 어플리케이션이 실행되지 않음 | 런타임 오류가 발생 |
사용 빈도 | 자주 사용됨 | 드물게 사용 |
메모리 사용량 | 시작시 전부 로드 되므로 즉시 초기화 보다 많다. | 즉시 초기화보다 적다. |
적합한 상황 | 거의 모든 Bean에 적합함 | 시작시 Bean을 로드하지 않고 사용해야 할 경우 |
'코딩 공부 > web & Java' 카테고리의 다른 글
[Spring] @PostConstruct와 @PreDestroy (1) | 2023.10.06 |
---|---|
[Spring] Bean 스코프 (0) | 2023.10.05 |
[Spring] @Component와 @Bean의 차이 (1) | 2023.10.02 |
[Spring] Spring Bean (0) | 2023.10.01 |
HTTP multipart/form-data (0) | 2023.06.29 |