반응형
빈 라이플 사이클 관리
- 스프링을 포함한 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="") 되었다면, 지정된 초기화 메서드 호출
초기화 메서드 해석 순서 이해
- 빈 인스턴스 하나에 모든 초기화 매커니즘을 사용할 수도 있다.
단계별
- 빈 생성을 위해 생성자를 호출한다.
- 의존성을 주입한다.(수정자 호출)
- 빈생성, 의존성 주입 후 사전 초기화를 담당하는 BeanPostProcessor 기반 빈들에게 호출해야 하는 메서드가 있는지 확인을 요청. BeanPostProcessor 빈들은 빈이 생성된 후 빈 조작을 수행하는 스프링에 특화된 기반 빈들이다.@PostContrutor는 CommonAnnoationaBeanPostProcessor 빈에 등록CommonAnnoationaBeanPostProcessor 빈이 @PostContrutor 애너테이션이 적용된 메서드를 호출한다.해당 메서드는 빈이 생성된 직후 그리고 빈이 서비스되기 전에 실행되며, 실제 빈 초기화 전인 afterPropertieSet과 init-method 이전에 수행된다.
- 의존성 주입이 끝난 직후 IntiailzingBean의 afterPropertieSet 메서드를 실행한다.빈에 모든 프로퍼티가 주입되고 BeanFactoryAware와 ApplicationContextAware의 처리가 완료되면 BeanFactory가 afterPropertieSet 메서드를 호출한다.
- 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 |