본문 바로가기
Spring/기본

8. 빈 생명주기 콜백

by wch_t 2023. 8. 10.

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