빈 라이프사이클과 범위 - accidentlywoo/legacyVue GitHub Wiki

빈 라이프사이클과 범위


객체 생성 -> 의존 설정 -> 초기화 -> 소멸

스프링 컨테이너를 초기화할 때, 스프링 컨테이너는 가장 먼저 빈 객체를 생성하고, 태그로 지정한 의존을 설정한다. 의존 자동 주입을 통한 의존 설정도 이 시접에 수행된다. 모든 의존 설정이 완료되면, 빈 객체의 초기화를 수행한다. 빈 객체를 초기화하기 위해 스프링은 빈 객체의 지정한 메서드를 호출한다.

빈 객체의 초기화와 소멸 : 스프링 인터페이스

빈 객체를 초기화하고 소멸하기 위해 빈 객체의 지정한 메서드를 호출한다고 했는데, 스프링은 다음의 두 인터페이스에 이 메서드를 정의하고 있다.

  • org.springframework.beans.factory.InitializingBean
  • org.springframework.beans.factory.DisposableBean

두 인터페이스는 다음과 같이 정의되어있다.

public interface InitializingBean{
 void afterPropertiesSet() Throws Exception;
}

public interface DisposableBean{
 void destroy() throws Exception;
}

빈 객체가 InitializingBean 인터페이스를 구현한 경우, 스프링 컨테이너는 초기화 과정에서 빈 객체의 afterPropertieesSet() 메서드를 실행한다. 따라서, 빈 객체가 생성된 뒤에 초기화 과정이 필요한 경우 InitializingBean 인터페이스를 상속하고 afterPropertiesSet() 메서드를 알맞게 구현해주면 된다.

비숫하게, 스프링 컨테이너는 빈 객체가 DisposableBean 인터페이스를 구현한 경우, 소멸 과정에서 빈 객체의 destroy() 메서드를 실행한다. 따라서, 빈 객체의 소멸 과정이 필요한 경우 DisposableBean 인터페이스를 상속하고 destroy() 메소드를 알맞게 구현하면 된다.

초기화와 소멸 과정이 필요한 흔한 예가 데이터베이스 커넥션 풀이다.커넥션 풀을 위한 빈 객체는 초기화 과정에서 데이터베이스와의 연결을 생성한다. 컨테이너를 사용하는 동안 연결을 사용하고, 빈 객체를 소멸할 때 사용 중인 데이터베이스 연결을 끊어줘야 한다.

또 다른 예로 채팅 클라이언트를 만든다고 해보자. 이 경우 어플리케이션이 시작될 때 서버와 연결을 생성하고, 어플리케이션이 종료될 때 연결을 끊을 것이다. 이때 서버와의 연결을 생성하고 끊는 작업을 초기화 시점과 소멸 시점에 수행하면 된다.

InitializingBean 인터페이스와 DisposableBean 인터페이스를 구현한 간단한 클래스를 통해서 실제로 초기화 메서드와 소멸 메서드가 언제 실행되는지 확인해보도록 하자.

⚠️ **GitHub.com Fallback** ⚠️