1. 빈 생명주기 콜백 시작
애플리케이션에서 데이터베이스 커넥션 풀이나 네트워크 소켓과 같은 리소스를 애플리케이션의 생명주기에 맞춰서 초기화 및 종료 작업을 수행해야 할 경우 사용한다. 스프링 프레임워크는 빈의 라이프사이클 관리를 제공하여 이러한 작업을 간편하게 처리할 수 있게 도와준다.
스프링 빈의 라이프사이클
객체 생성 → 의존관계 주입
스프링 빈은 객체를 생성하고, 의존관계 주입이 다 끝난 다음에, 필요한 데이터를 사용할 수 있는 준비가 완료된다.
따라서 초기화 작업(객체 메서드 호출, 외부 커넥션 연결)은 의존관계 주입이 모두 완료되고 난 다음에 호출해야 한다.
Q. 그런데 개발자가 의존관계 주입이 모두 완료된 시점을 어떻게 알 수 있을까??
A. 스프링은 의존관계 주입이 완료되면 스프링 빈에게 콜백 메서드를 통해서 초기화 시점을 알려주는 다양한 기능을 제공,
스프링 컨테이너가 종료되기 직전에 안전하게 종료할 수 있도록, 소멸 콜백을 준다.
스프링 빈의 이벤트 라이프사이클
스프링 컨테이너 생성 → 스프링 빈 생성 → 의존관계 주입 → 초기화 콜백 → 사용 → 소멸 전 콜백 → 스프링 종료
2. 빈 생명주기 콜백 3가지 방법
1) 인터페이스(InitializingBean, DisposableBean)
단점
- 스프링 전용 인터페이스에 의존한다.
- 초기화, 소멸 메서드의 이름을 변경할 수 없다.
- 코드를 고칠 수 없는 외부 라이브러리에 적용할 수 없다.
→ 초기의 방법으로, 지금은 거의 사용하지 않는다.
2) 빈 등록 초기화, 소멸 메서드 지정
: 설정 정보(Config)에 @Bean(initMethod = "init", destroyMethod = "close") 처럼 초기화, 소멸 메서드를 지정
특징
- 메서드 이름을 자유롭게 쓸 수 있다.
- 코드가 아니라, 설정 정보를 사용하기 때문에 외부 라이브러리에도 초기화, 소멸 메서드를 적용할 수 있다.
destoryMethod 추론
- 라이브러리는 대부분 close, shutdown 이라는 이름의 소멸 메서드를 사용한다.
- @Bean의 destoryMethod는 기본값이 (inferred) (추론)으로 등록되어 있다.
- 추론 기능은 close, shutdown 이름의 소멸 메서드를 추론해서 자동으로 호출해준다.
- 따라서 스프링 빈으로 등록하면 종료 메서드는 따로 적어주지 않아도 잘 동작한다.
- 추론 기능을 사용하기 싫으면 destoryMethod="" 처럼 빈 공백을 지정하면 된다.
3) 애노테이션, @PostConstruct, @PreDestroy
: @PostConstruct : 생성 전
: @PreDestroy : 소멸 전
특징
- 최신 스프링에서 가장 권장하는 방법
- 스프링에 종속적인 기술이 아니라, 자바 표준이다.
단점
- 외부 라이브러리에는 적용하지 못한다.
2번째 방법 @Bean의 initMethod, destroyMethod를 사용하자
'Spring > 기본' 카테고리의 다른 글
9. 빈 스코프 (0) | 2023.08.10 |
---|---|
7. 의존관계 자동 주입 (0) | 2023.08.10 |
6. 컴포넌트 스캔 (0) | 2023.08.04 |
5. 싱글톤 컨테이너 (0) | 2023.08.04 |
4. 스프링 컨테이너와 스프링 빈 (0) | 2023.08.03 |