빈 생명주기 콜백
객체의 초기화 작업
- 빈(Bean)의 생성과 의존관계 주입이 완료되고 호출되는 작업
- 애플리케이션 시작 시점에 필요한 연결을 미리 하는 작업은 반드시 빈 생성&의존관계 주입이 모두 완료된 후 시작되어야 함
- 개발자가 이 시점을 알기 위해 필요한 것이
초기화 콜백 메서드
객체의 종료 작업
- 애플리케이션 종료 시점에 연결을 모두 종료하는 작업을 진행하기 위한 과정
- 개발자가 이 시점을 알기 위해 필요한 것이
종료 콜백 메서드
생명주기 콜백의 변화
초기화 작업
/ 종료 작업
을 하기 위한 스프링의 방법은 크게 3가지가 있으며, 시간에 따라 변화되었다.
- 3가지 방법
1) 인터페이스 상속(InitializingBean
/ DisposableBean
)
2) 빈(Bean) 등록 초기화, 소멸 메서드
3) 어노테이션 @PostConstruct
/ @PreDestory
1. 인터페이스 상속(InitializingBean / DisposableBean)
- 가장 과거에 사용되던 방법
- 초기화 / 종료 작업을 하기 위해 2가지 인터페이스를 상속받은 뒤 사용
- 단점
- 스프링 전용 인터페이스에 의존
- 초기화, 소멸 메서드의 이름 변경 불가능
- 외부 라이브러리에 적용 불가능
2. 빈(Bean) 등록 초기화, 소멸 메서드
1. (빈 선언시 이름 지정)
@Bean
에 initMethod
와 destoryMethod
로 이름 지정
2. (메서드 구현)
- 지정한 이름에 따른 함수 선언 및 사용
- 장점
- 메서드 이름을 자유롭게 지정
- 스프링 빈이 스프링 코드에 의존하지 않는다
- 외부 라이브러리에도 초기화, 종료 메서드를 적용할 수 있다.
- 특징
destoryMethod
는 기본적으로 (inferred)
-추론으로 등록되어 있다.
destoryMethod
는 명시하지 않을 때 close / shutdown 이라는 이름의 종료 메서드를 기본적으로 추론하여 사용
--> 대부분 라이브러리에서 close / shutdown사용함
- 추론 기능을 사용하기 싫으면
destoryMethod=""
으로 공백을 지정
3. @PostConstruct / @PreDestory
초기화 작업
: @PostConstuct
를 원하는 메서드 위에 선언
종료 작업
: @PreDestory
를 원하는 메서드 위에 선언
- 최신 스프링에서 가장 권장하는 방법
- 유일한 단점 --> 외부 라이브러리에 적용하지 못함 -->
@Bean
사용해야함!
정리
- 기본적으로
@PostConstuct
/ @PreDestory
를 사용하자
- 외부 라이브러리를 초기화 / 종료 해야하면
@Bean
의 initMethod
/ destoryMethod
사용!