본문 바로가기

스프링 부트

@PostConstruct와 @PreDestroy

Spring에서는 빈의 생성과 소멸을 어노테이션으로 관리할 수 있다. 

@PostConstruct

Spring은 빈 초기화 직후에 @PostConstruct이 달린 메서드를 한 번만 호출한다.
만약 
초기화할 것들이 없는 경우에도 해당 메서드는 실행이 된다.

@PostConstruct가 달린 메서드는 모든 접근 제어자를 가질 수 있지만 static 메서드일 수는 없다.

Example

애플리케이션 구동 시 더미 데이터가 필요한 경우 - (근로)
해당 더미 관련 Service에서 관련 Repository 빈 초기화가 이루어진 후 @PostConstruct가 붙은 메서드가 실행되면서 더미데이터를 넣을 수 있다.

사실 이 전에 더미데이터 넣는 방법을 무조건 ApplicationRunner를 구현한 DataLoader에서만 이루도록 했었다.
하지만 @PostConstruct를 써서 더미데이터를 넣을 경우 관련된 서비스에서 더미 데이터 선언을 할 수 있고, 
불필요하게 모든 repository를 끌고 오지 않고 해당 서비스에서 더미 관련 로직을 처리해줄 수 있다. 

@PreDestroy

Spring이 애플리케이션 컨텍스트에서 빈을 제거하기 직전 @PreDestroy이 달린 메서드를한 번만호출한다
즉 애플리케이션 컨텍스트에서 빈을 제거하기 전 해야할 작업이 있으면 해당 메서드에 정의하면 된다.
@PreDestroy가 달린 메서드는 모든 접근 제어자를 가질 수 있지만 static 메서드일 수는 없다.

 

참고자료

Spring PostConstruct and PreDestroy Annotations