본문 바로가기

JAVA/Spring

빈 라이프 사이클 관리

반응형

빈 라이플 사이클 관리

  • 스프링을 포함한 IoC 컨테이너가 제공하는 주요 기능 중 하나는 생성이나 소멸 같은 빈 라이프사이클의 특정 시점에 통지를 받을 수 있게 빈을 생성하는 것이다.
  • 빈이 라이프 사이클 이벤트 통지를 받을 수 있게 설정하면 빈은 이벤트 발생 시점에 관련 처리를 할수 있다.
  • 초기화 이후(post-initialization)와 소멸이전(pre-destruction) 이벤트
  • 3가지 방법으로 인터페이스기반, 메서드 기반, 애너테이션 기반
  • 인터페이스 기반은 콜백을 사용해 해당빈을 통지
  • 메서드 기반은 빈이 초기화될때, 소멸될때 호출할 메서드 이름을 ApplicationContext 구성에 지정
  • 애너테이션 기반은 빈을 초기화한 후나 소멸 전에 호출해야 할 메서드를 JSR-250에 정의된 애너테이션으로 구성

스프링 빈 라이프사이클 순서

빈 초기화와 DI

1) 자바 구성 클래스에서 빈 정의를 검색
2) 빈 인스턴스 생성
3) 빈 의존성을 주입 (수정자 호출 또는 autowired 필드에 값 설정)

빈이 스프링을 알아야 하는지 (Spring Awareness) 확인
4) 빈이 BeanNameAware를 구현했다면, setBeanName() 호출
5) 빈이 BeanClassLoaderAware를 구현했다면, setBeanClassName() 호출
6) 빈이 ApplicationContextAware를 구현했다면, setApplicationContext()를 호출

빈 생성 라이플사이클 콜백
7) @PostConstruct 메서드 호출
8) 빈이 IntiailzingBean을 구현했다면 afterPropertieSet() 호출
9) 빈에 init-method가 정의 또는 @Bean(initMethod="") 되어있다면, 지정된 초기화 메서드를 호출

빈 소멸 생명주기 콜백
10) @PreDestroy 존재하면 메서드 호출
11) 빈이 DisposibleBean을 구현했다면 destory() 호출
12) 빈에 destory-method가 정의 또는 @Bean(destoryMethod="") 되었다면, 지정된 초기화 메서드 호출

초기화 메서드 해석 순서 이해

  • 빈 인스턴스 하나에 모든 초기화 매커니즘을 사용할 수도 있다.

단계별

  1. 빈 생성을 위해 생성자를 호출한다.
  2. 의존성을 주입한다.(수정자 호출)
  3. 빈생성, 의존성 주입 후 사전 초기화를 담당하는 BeanPostProcessor 기반 빈들에게 호출해야 하는 메서드가 있는지 확인을 요청. BeanPostProcessor 빈들은 빈이 생성된 후 빈 조작을 수행하는 스프링에 특화된 기반 빈들이다.@PostContrutor는 CommonAnnoationaBeanPostProcessor 빈에 등록CommonAnnoationaBeanPostProcessor 빈이 @PostContrutor 애너테이션이 적용된 메서드를 호출한다.해당 메서드는 빈이 생성된 직후 그리고 빈이 서비스되기 전에 실행되며, 실제 빈 초기화 전인 afterPropertieSet과 init-method 이전에 수행된다.
  4. 의존성 주입이 끝난 직후 IntiailzingBean의 afterPropertieSet 메서드를 실행한다.빈에 모든 프로퍼티가 주입되고 BeanFactoryAware와 ApplicationContextAware의 처리가 완료되면 BeanFactory가 afterPropertieSet 메서드를 호출한다.
  5. init-method로 지징된 빈의 실제 초기화 메서드를 맨 마지막에 실행한다.

 

전문가를 위한 스프링 5
- 율리아나 코스미나, 롭해롭, 크리스 샤이퍼, 클라렌스 호 지음
- 이승룡, 김성윤, 서경석 옮김

반응형

'JAVA > Spring' 카테고리의 다른 글

FactoryBean 사용  (0) 2023.11.02
검증과 데이터바인딩  (0) 2022.01.28
AOP  (0) 2022.01.28
캐싱  (0) 2022.01.28
데이터베이스 연결  (0) 2022.01.05