본문 바로가기

Spring

Spring(4) - 빈의 생명주기와 범위

기본적으로 스프링 컨테이너의 생명주기는 [객체 생성 -> 프로퍼티설정 -> 초기화 -> 사용 후 소멸]이라는 라이프 사이클을 가지고 있다. 스프링은 객체의 초기화와 소멸 과정을 위해 두가지의 인터페이스를 제공해준다.

  • o.s.beans.factory.InitializingBean : 빈의 초기화 과정에서 실행될 메서드를 정의
  • o.s.beans.factory.DisposableBean : 빈의 소멸 과정에서 실행될 메서드를 정의

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

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

이 두가지를 구현한 클래스를 빈으로 등록하면 스프링은 초기화를 진행하고, 컨테이너를 종료할 때 소멸을 진행한다.
초기화/소멸을 진행하는 또다른 방법은 @PostConstruct, @PreDestroy를 사용하는 것이다.
이 외에 커스텀으로 초기화/소멸 메서드를 지정하는 방법이 있는데 다음과 같이 지정할 수 있다.

<bean id = "빈 이름" class = "클래스" init-method = "init" destroy-method = "destroy"/>

 

초기화와 소멸과정에서 사용되는 메서드는 파라미터를 가질 수 없다!

다음으로 빈 객체의 범위에 대해서 알아보겠다.
빈 객체의 범위에는 싱글톤과 프로토타입 범위가 있다. 먼저 싱글톤 범위는 빈 객체를 생성할 때 항상 같은 객체를 참조하는 것이다. 두개의 빈을 생성해도 같은 객체를 참조한다. 프로토타입 범위로 빈을 설정하면 빈 객체를 생성할 때 항상 새로운 객체가 만들어진다. 상황에 따라서 다르게 쓰면 된다.

<bean id = "빈 아이디" class = "클래스" scope = "singleton, prototype"/>