본문 바로가기

SpringFramework Core - I. IoC 컨테이너/6. Bean 커스터마이징하기

6.1.2. 소멸 콜백

원문: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-factory-lifecycle-disposablebean

 

 

org.springframework.beans.factory.DisposableBean 인터페이스를 구현하면 컨테이너가 소멸될 때 bean이 콜백을 받을 수 있다. DisposableBean 인터페이스는 하나의 메소드를 가진다.

void destroy() throws Exception;

우리는 DisposableBean 콜백 인터페이스를 사용하지 않는 것을 권장한다. 스프링의 코드와 불필요한 결합을 맺게 되기 때문이다. 대신에, @PreDestroy 어노테이션이나 bean 정의에서 제공하는 지네릭 메소드를 설정하는 것을 추천한다. XML 기반의 설정 메타데이터에서는, <bean/>의 'destroy-method' 속성을 사용할 수 있다. 자바 설정에서는 @Bean의 destroyMethod 속성을 사용할 수 있다. '라이프사이클 콜백 받기'를 참고하라. 다음 정의를 보자.

<bean id="exampleInitBean" class="examples.ExampleBean" destroy-method="cleanup" />
public class ExampleBean {

    public void cleanup() {
        // (커넥션 풀을 놓아주는 등) 소멸 작업을 한다.
    }
}

위의 정의는 다음 정의와 거의 같은 효과를 가진다.

<bean id="exampleInitBean" class="examples.AnotherExampleBean" />
public class AnotherExampleBean implements DisposableBean {

    @Override
    public void destroy() {
        // (커넥션 풀을 놓아주는 등) 소멸 작업을 한다.
    }
}

하지만 전자의 두 정의는 스프링의 코드와 결합되지 않는다.

 

  특별히 추론된(inferred) 값으로 <bean> 요소의 destroy-method 속성을 할당할 수도 있다. 이는 스프링으로 하여금 자동적으로 bean 클래스가 가진 public한 close와 shutdown 메소드를 찾아내도록 한다. (java.lang.AutoCloseable 또는 java.io.Closeable을 구현한 클래스를 찾아낼 것이다). 이 행동을 전체 bean들에게 적용하기 위해서는 <beans> 요소의 default-destroy-method 속성에 특별한 추론된(inferred) 값을 사용하면 된다. ('기본적인 초기화, 소멸 메소드들'을 참고하라). 자바 설정에서는 이런 행동들이 기본이라는 점을 주의하라.