서론
보통 스프링 빈이 생성되거나 소멸될 때 특정한 작업을 하고싶은 경우가 있다. 예를 들어, 빈이 생성될 때 데이터베이스 커넥션 풀을 미리 생성하는 경우가 있다.
이러하게 빈이 생성되거나 종료될 때 빈의 라이프 사이클을 관리하는데 유용한 @PostConstruct, @PostDestroy 어노테이션을 사용하여 어떻게 작업을 진행하는지 알아보려한다.
스프링 빈의 라이프사이클
- 스프링 컨테이너 생성
- 빈 생성
- 의존관계 주입
- 초기화 콜백
- 사용
- 소멸 전 콜백
- 스프링 종료
초기화 콜백: 빈이 생성되고 빈의 의존관계 주입이 완료된 후 호출되는 것을 말한다.
소멸전 콜백: 빈이 소멸되기 직전에 호출된다.
@PostConstruct란?
@PostConstruct
public void init() {
System.out.println("초기화 메서드 호출")
}
...
@PreDestroy
public void destroy() {
System.out.println("종료 메서드 호출")
}
특징
- 객체가 생성된 후 별도의 초기화 작업을 위해 실행하는 메서드 위에 선언한다.
- @PostContruct가 붙은 메서드는 WAS가 띄어질 때 실행된다.
장점 (왜 사용?)
- 빈이 초기화 됨과 동시에 의존성을 확인할 수 있다.
- bean lifecycle에서 오직 한번만 수행된다는 것을 보장할 수 있다는 특징이 있어서 해당 부분을 활용하여 bean이 여러번 초기화 되는것을 방지할 수 있다.
@PreDestroy란?
@PreDestroy
public void destroy() {
System.out.println("종료 메서드 호출")
}
...
특징
- 마지막 소멸 단계에 해당된다.
- 스프링 컨테이너에서 스프링 빈(객체)을 제거하기 전에 해야할 작업이 있을 때 메서드 위에 선언한다.
- close()하기 직전에 실행한다.
반응형
'Programming > Spring' 카테고리의 다른 글
JPA Entity의 @Setter를 지양하는 이유에 대해서 (feat. @Builder) (2) | 2022.09.10 |
---|---|
원활한 MSA를 위한 Spring Cloud란? (개념/ 종류/ Config Server/ Gateway) (0) | 2022.06.16 |
[Spring Boot] JPA Entity 현재시간(current_timestamp) 적용 방법(@CreationTimestamp/ @UpdateTimestamp) (1) | 2022.06.09 |
[Spring Boot] Jackson을 이용하여 Response값 Filtering 방법 (개념/ 예제) (2) | 2022.06.07 |
[Spring] 의존성 주입(Dependency Injection)이란? (개념/ 예제/ 총 정리) (2) | 2022.05.31 |
댓글