Bean LifeCycle
0. 들어가면서
Bean LifeCycle
- 해당 객체가 생성되고 소멸될까지의 과정을 나타냄(when, how)
- Spring은 3가지 방법으로 Bean LifeCycle Callback을 관리
1. Bean LifeCycle Flow
- Create Spring Container
- Create Spring Bean
- Dependencies Injected
- Bean Initialize : After 2,3 step
- Use
- Callback Before Destroy : Before Bean Destroyed
- Spring Off
2. Callback
- Spring Framework는 Bean LifeCycle 제어를 위해 다음과 같은 방법을 제공
- Interfaces( InitializingBean & DisposableBean )
- Setting Method( initialize() & close() )
- Annotation( @PostConstruct & @PreDestroy )
2.1 InitializingBean & DisposableBean
-
InitializingBean : Bean에 필요한 속성들이 Container에 설정된 후 Bean Initialize Callback
-
DisposableBean : Spring Container가 Bean을 소멸하기 전 Bean Destroy Callback
public class Example implements InitializingBean, DisposableBean {
public Example() {
System.out.println("Constructor Callback");
}
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("Initialization");
//Bean Initialization Code
}
@Override
public void destroy() throws Exception {
System.out.println("Destruction");
//Bean Destruction Code
}
}
- Interface를 이용한 Initialize, Destroy 방법(Spring 초창기에 사용하던 방법)
2.2 initialize() & destroy()
-
@Bean에 initMethod, destroyMethod 속성을 이용하여 Initialize, Destroy
-
@Bean(initMethod = “initialize”, destroyMethod = “close”)
public class Example{
public void initialize() throws Exception{
System.out.println("Initialization");
//Bean Initialization Code
}
public void close() throws Exception{
System.out.println("Destruction");
//Bean Destruction Code
}
}
@Configuration
class LifeCycleConfigi{
@Bean(initMethod = "initialize", destroyMethod = "close")
public Example example(){
}
}
2.3 @PostConstruct & @PreDestroy
-
@PostConstruct : Bean이 생성 후 Instance가 요청 객체에 반환되기 직전에 Callback
-
@PreDestroy : Bean Container 내부에서 Bean Destroy 직전에 Callback
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
public class Example{
@PostConstruct
public void customInit(){
System.out.println("Customized Initialize Method Callback");
}
@PreDestroy
public void customDestroy(){
System.out.println("Customized Destroy Method Callback");
}
}
- Annotation을 통해서 Callback 함수들을 Cuustomize(최신 스프링에서 권장하는 방식)
3. Comparation
Interface | Config Method | Annotation | |
---|---|---|---|
Usage In External Library | X | O | X |
Spring Code Dependency | O | X | X |
- 코드 수정이 불가능한 외부 라이브러리에는 설정 정보에 초기화, 종료 메소드 지정 방식 방식을 사용하는 것이 좋음
- initialize() & destroy()