[Spring] Bean LifeCycle

스프링 Bean의 LifeCycle

1
2
3
4
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(AppContext.class); // 1번
Greeter g = ctx.getBean("greeter", Greeter.class); // 2번
String msg = g.greet("스프링");
ctx.close(); // 3번
  1. 위 코드에서 1번 시점에서 스프링 컨테이너를 초기화한다. 스프링 컨테이너는 설정클래스에서 정보를 읽어와서 알맞은 빈 객체를 생성하고, 각 빈을 DI하는 작업을 수행한다.
  2. 컨테이버 초기화가 완료되면 컨테이너를 2번과 같이 사용할 수 있다. 즉, 컨테이너에 보관된 빈 객체를 구할 수 있다.
  3. 컨테이너 사용이 끝나면 컨테이너를 종료한다.

컨테이너의 초기화는 (빈 객체의 생성 -> DI -> 초기화)를 의미하고, 컨테이너의 종료는 (빈 객체의 소멸)을 의미한다.

스프링 빈 객체의 라이프사이클

빈 객체는 4단계의 라이프 사이클을 가진다.

  1. 객체 생성
  2. 의존 설정
  3. 초기화
  4. 소멸

빈 객체의 생성과 소멸

빈 객체의 생성과 소멸 과정에서는 아래의 인터페이스의 메서드를 호출한다.

1
2
3
4
5
6
7
8
9
@Configuration
public class AppCtx{
  @Bean
  pubilc Client client(){
    Client client = new Client(); // 1단계 객체 생성
    client.setHost("host"); // 2단계 의존 설정 또는 properties 설정
    return client;
  }
}
1
2
3
4
5
6
7
public interface InitializingBean{
  void afterPropertiesSet() throws Exception; // 3단계 초기화에서 호출된다.
}

public interface DisposableBean{
  void destroy() throws Exception; // 4단계 소멸 과정에서 호출된다. 
}

빈 객체가 InitializingBean을 구현하면 스프링 컨테이너는 3번째 단계인 초기화 과정에서 빈 객체의 afterPropersitesSet()을 호출한다. 초기화와 소멸 과정이 필요한 예로는 DB Connection Pool과 채팅 클라이언트가 있다.

Reference

  • 초보 웹 개발자를 위한 스프링 5 프로그래밍 입문, 최범균

Leave a comment