⭐️ @PostConstruct와 @PreDestroy 빈의 초기화 + 빈의 소멸
@PostConstruct, @PreDestroy 이 두 애노테이션을 사용하면 가장 편리하게 초기화와 종료를 실행할 수 있다.
[ @PostConstruct, @PreDestroy 애노테이션 특징 ]
최신 스프링에서 가장 권장하는 방법이다. 애노테이션 하나만 붙이면 되므로 매우 편리하다.
패키지를 잘 보면 `javax.annotation.PostConstruct` 이다. 스프링에 종속적인 기술이 아니라 JSR-250 라는 자바 표준이다. 따라서 스프링이 아닌 다른 컨테이너에서도 동작한다. 컴포넌트 스캔과 잘 어울린다.
유일한 단점은 외부 라이브러리에는 적용하지 못한다는 것이다. 외부 라이브러리를 초기화, 종료 해야 하면 @Bean의 기능을 사용하자.
[ 정리 ]
@PostConstruct, @PreDestroy 애노테이션을 사용하자
코드를 고칠 수 없는 외부 라이브러리를 초기화, 종료해야 하면 @Bean의 initMethod, destroyMethod를 사용하자.
@PostConstruct와 @PreDestroy 어노테이션은 스프링 프레임워크에서 빈의 초기화와 소멸 단계를 지정하는 데 사용됩니다. 이 두 어노테이션의 주요 차이점은 다음과 같습니다
[ @PostConstruct ]
- @PostConstruct 어노테이션은 빈이 생성된 후 초기화 작업을 수행해야 할 때 메서드에 지정됩니다.
- 해당 메서드는 빈이 생성된 후에 스프링 컨테이너에 의해 자동으로 호출됩니다.
- 주로 빈의 초기화 작업을 수행하기 위해 사용됩니다. 이 작업에는 파일 읽기, 데이터베이스 초기화, 외부 서비스와의 연결 설정 등이 포함될 수 있습니다.
import javax.annotation.PostConstruct;
public class MyBean {
@PostConstruct
public void init() {
// 빈 초기화 작업 수행
System.out.println("MyBean initialized");
}
}
위의 코드에서 init() 메서드는 @PostConstruct 어노테이션이 지정되어 있으므로, 해당 빈이 생성된 후 자동으로 호출됩니다.
[ @PreDestroy ]
- @PreDestroy 어노테이션은 빈이 소멸되기 전에 정리 작업을 수행해야 할 때 메서드에 지정됩니다.
- 해당 메서드는 빈이 소멸되기 직전에 스프링 컨테이너에 의해 자동으로 호출됩니다.
- 주로 빈이 사용한 리소스를 해제하거나 외부 연결을 종료하는 등의 작업을 수행하기 위해 사용됩니다.
import javax.annotation.PreDestroy;
public class MyBean {
@PreDestroy
public void cleanup() {
// 정리 작업 수행
System.out.println("MyBean destroyed");
}
}
위의 코드에서 cleanup() 메서드는 @PreDestroy 어노테이션이 지정되어 있으므로, 해당 빈이 소멸되기 직전에 자동으로 호출됩니다.
따라서, @PostConstruct 어노테이션은 빈의 초기화 작업을 수행하는 메서드를 지정하고,
@PreDestroy 어노테이션은 빈의 소멸 전에 정리 작업을 수행하는 메서드를 지정합니다.
이를 통해 빈의 생명주기에 관련된 작업을 간편하게 수행할 수 있습니다.