Spring

init-method와 destroy-method 속성

n.han 2017. 2. 26. 22:08

Spring Bean의 생명 주기는 이해하기 쉬운 편입니다. Bean이 초기화 되면, 사용할 수 있는 상태가 되기 위해 몇가지의 초기화 작업이 필요합니다. 비슷하게, Bean이 더 이상 필요하지 않게 되고, container에서부터 제거되면, 몇가지 clean up 작업이 필요합니다.


Bean이 초기화 되고 파괴될 때 여러 보이지 않는 작업들이 발생하지만, 그 중에서도 가장 중요한 두 가지의 life cycle callback 메서드를 설명 드리고자 합니다.


Bean을 정의할 때 init-method와 destroy-method 속성을 통해서 Bean 인스턴스가 만들어지고, 파괴될 때 호출되는 메서드를 지정할 수 있습니다.


1. Initialization, destruction callbacks by using interface:

- org.springframework.beans.factory.InitialingBean interface는 다음 메서드를 포함합니다.

그래서 단순히 위의 interface를 implement하고, afterPropertiesSet() 메서드를 구현하여 Bean 초기화 작업때 필요한 일을 하면 됩니다.

- 또한, org.springframework.beans.factory.DisposableBean interface의 destory() 메서드를 통해서 destruction callback을 구현할 수 있습니다.

- 하지만 이런 interface를 통한 callback method를 사용하는 것은 권장하지 않습니다. 그 이유는 XML configuration을 통해 구현하는 것이 메서드를 naming하는 데 있어 훨씬 유연하기 때문입니다.


2. Initialization, destruction callbacks by using XML-based configuration:

- 초기화 및 파괴될 때 XML-based configuration metadata의 init-method, destory-method를 통해서 쉽게 callback method를 지정할 수 있습니다.


다음은 XML-based configuration을 이용한 init, destroy callback 예제입니다.

먼저, 클래스의 인스턴스 초기화 시 호출할 init() 메서드와, 파괴될 때 호출될 destroy() 메서드를 만들었습니다.


Bean 객체가 정의된 XML Configuration에 init-method, destory-method 속성 값으로 각각 call back될 메서드를 넣었습니다.


프로그램이 시작되면, 위의 클래스의 Bean 객체를 만들고, ApplicationContext가 상속하는 AbstractApplicationContext의 registerShutdownHook() 메서드를 사용하여 context를 강제로 종료 시킴으로써 인스턴스를 파괴 시켰습니다.


그 결과 지정한 call back 메서의 작업이 수행된 것을 볼 수 있습니다.


'Spring' 카테고리의 다른 글

Spring Bean Definition Inheritance  (0) 2017.03.03
Spring Bean Post Processor  (0) 2017.02.27
Spring Bean Scope  (0) 2017.02.24
Bean Definition  (0) 2017.02.24
Spring IoC Container  (0) 2017.02.24