@PostConstruct
PostConstruct 어노테이션은 초기화를 수행하기 위해 의존성 주입이 완료된 후 실행해야 하는 메서드에서 사용하며, 이 메서드는 클래스를 사용하기 전에 호출되어야 합니다. 다른 Bean이 이 Bean을 사용할 수 있게 되기 전에 이 메서드가 호출되며, 이때 애플리케이션이 실행되고 Bean이 로드됩니다.
@Component
class SomeClass {
private SomeDependency someDependency;
public SomeClass(SomeDependency someDependency) {
super();
this.someDependency = someDependency;
System.out.println("All dependencies are ready!");
}
@PostConstruct
public void initialize() {
someDependency.getReady();
}
}
@Component
class SomeDependency {
public void getReady() {
System.out.println("Some logic using SomeDependency");
}
}
출력
All dependencies are ready!
Some logic using SomeDependency
org.springframework.context.annotation.internalConfigurationAnnotationProcessor
org.springframework.context.annotation.internalAutowiredAnnotationProcessor
org.springframework.context.annotation.internalCommonAnnotationProcessor
org.springframework.context.event.internalEventListenerProcessor
org.springframework.context.event.internalEventListenerFactory
prePostAnnotationsLuncherApplication
someClass
예를 들어 데이터베이스 등에서 데이터를 가져오려는 경우에 PostConstruct를 사용하여 이와 같이 의존성 준비 완료 후에 로직이 실행시킬 수 있습니다.
@PreDestroy
PreDestroy 어노테이션은 컨테이너에서 인스턴스를 삭제하는 과정 중에 있음을 알려주는 콜백 알림으로 메서드로 사용됩니다. 보통 유하고 있던 리소스를 해제하는 데 일반적으로 사용된다고 합니다.
즉, 애플리케이션이 종료되기 전에 컨텍스트에서 Bean이 삭제되기 전에 뭔가 해야 할 경우 사용합니다.
@Component
class SomeClass {
private SomeDependency someDependency;
public SomeClass(SomeDependency someDependency) {
super();
this.someDependency = someDependency;
System.out.println("All dependencies are ready!");
}
@PostConstruct
public void initialize() {
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 PrePostAnnotationsLuncherApplication {
public static void main(String[] args) {
try (var context =
new AnnotationConfigApplicationContext
(PrePostAnnotationsLuncherApplication.class))
{
Arrays.stream(context.getBeanDefinitionNames())
.forEach(System.out::println);
}
}
}
출력
All dependencies are ready!
Some logic using SomeDependency
org.springframework.context.annotation.internalConfigurationAnnotationProcessor
org.springframework.context.annotation.internalAutowiredAnnotationProcessor
org.springframework.context.annotation.internalCommonAnnotationProcessor
org.springframework.context.event.internalEventListenerProcessor
org.springframework.context.event.internalEventListenerFactory
prePostAnnotationsLuncherApplication
someClass
someDependency
Clean up!
예를 들어 데이터 베이스 등의 연결을 마지막에 종료를 해야하는 상황에서 PreDestroy 어노테이션을 사용하여 컨텍스트에서 Bean이 삭제되기 전에 실행시킬 수 있습니다.
'코딩 공부 > web & Java' 카테고리의 다른 글
[Spring] Jakarta Contexts and Dependency injection (CDI) (1) | 2023.10.06 |
---|---|
[Java] Java EE, J2EE, Jakarta EE (1) | 2023.10.06 |
[Spring] Bean 스코프 (0) | 2023.10.05 |
[Spring] 지연 초기화 (0) | 2023.10.04 |
[Spring] @Component와 @Bean의 차이 (1) | 2023.10.02 |