@PostConstruct / @PreDestroy
2023. 5. 30. 18:37ㆍ기술 창고/어노테이션 창고
728x90
SMALL
@PostConstruct / @PreDestroy
어플리케이션을 실행하게 되면 Spring은 자동으로 의존성을 연결하고, 의존성을 자동 연결하는 대로 가장 먼저 @PostConstruct 가 적용된 메소드를 호출합니다.
@PreDestroy 는 어플리케이션이 종료될 때 마지막에 수행될 작업을 지정해주는 어노테이션이다. 기본적으로 보유하고 있었던 리소스들을 해제하는 데에 일반적으로 사용됩니다.
@PostConstruct : 어플리케이션을 실행 후 의존성이 연결되는 대로 바로 가장 먼저 초기화 작업 혹은 선행 작업을 수행하려고 할 때 사용.
@PreDestroy : 어플리케이션이 종료될 때, 의존성 주입받은 객체 사용이 종료될 때, 보유하고 있는 리소스들을 해제하거나 마무리 작업을 수행할 때 사용하는 어노테이션.
아무때나 사용하는 것이 아닌 의존성 주입이 된 객체를 사용할 때 사용합니다.
즉, PostConstruct 는 의존성 주입받은 객체를 초기 세팅할 때 사용하고, PreDestroy는 주입된 객체에 대한 수행 작업이 마무리 될 때 마지막에 사용되는 뒷 정리 용도로 사용된다고 보면 될 것입니다.
// 어플리케이션을 실행하게 되면 Spring은 자동으로 의존성을 연결하고, 의존성을 자동 연결하는 대로 가장 먼저 @PostConstruct 가 적용된 메소드를 호출한다.
// @PreDestroy 는 어플리케이션이 종료될 때 마지막에 수행될 작업을 지정해주는 어노테이션이다. 기본적으로 보유하고 있었던 리소스들을 해제하는 데에 일반적으로 사용된다.
//
// @PostConstruct : 어플리케이션을 실행 후 의존성이 연결되는 대로 바로 가장 먼저 초기화 작업 혹은 선행 작업을 수행하려고 할 때 사용
// @PreDestroy : 어플리케이션이 종료될 때 보유하고 있는 리소스들을 해제하거나 마무리 작업을 수행할 때 사용하는 어노테이션
// 아무때나 사용하는 것이 아닌 의존성 주입이 된 상태에서 사용
// PostConstruct 는 의존성 주입받은 객체를 초기 세팅할 때 사용하고, PreDestroy는 주입된 객체에 대한 수행 작업이 마무리 될 때 마지막에 사용되는 뒷 정리 용도로 사용된다고 보면 될 것이다.
@Component
class SomeClass{
private SomeDependency someDependency;
public SomeClass(SomeDependency someDependency){
this.someDependency = someDependency;
System.out.println("All dependencies are ready!");
}
@PostConstruct
public void initizalize(){
someDependency.getReady();
}
@PreDestroy
public void cleanup(){
System.out.println("Clean UP");
}
}
@Component
class SomeDependency{
public void getReady(){
System.out.println("Some logic using SomeDependency");
}
}
@Configuration
@ComponentScan
public class PrePostAnnotationsContextLauncherApplication {
public static void main(String[] args) {
try (var context = new AnnotationConfigApplicationContext(PrePostAnnotationsContextLauncherApplication.class)) {
Arrays.stream(context.getBeanDefinitionNames()).forEach(System.out::println);
}
}
}
위의 코드를 실행해보면 가장 먼저 의존성 주입을 받고 연결한 뒤 PostConstruct 로 지정된 메소드가 가장 먼저 실행되면서 주입받은 객체의 함수를 실행하게됩니다.
그리고 마지막에 객체 호출이 종료가 되기 전 마지막에 PreDestroy 로 지정된 메소드가 실행이 됩니다.
728x90
반응형
LIST
'기술 창고 > 어노테이션 창고' 카테고리의 다른 글
@Controller / @Service / @Repository (0) | 2023.06.06 |
---|---|
@Named / @Inject (ft. CDI) (0) | 2023.05.31 |
@Scope (0) | 2023.05.30 |
@Lazy (0) | 2023.05.30 |
@Primary (0) | 2023.05.30 |