bean 소멸 시점에 통지 받기 - DisposableBean 인터페이스 구현
- 초기화 시와 마찬가지로 소멸 시의 처리를 위한 DisposableBean 인터페이스를 구현할 수 있다.
- DisposableBean 인터페이스는destroy() 메서드 하나를 정의한다.
- bean 소멸 직전에 이 destroy() 메서드가 실행된다.
...
public class DescructiveBeanWithInterface
implements InitializingBean, DisposableBean {
private File file;
private String filePath;
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("bean을 초기화 합니다.");
if (filePath == null) {
throw new IllegalArgumentException(
DescructiveBeanWithInterface.class +
"에 filePath 속성을 지정해야 합니다.");
}
this.file = new File(filePath);
this.file.createNewFile();
System.out.println("파일 존재 여부: " + file.exists());
}
@Override
public void destroy() {
System.out.println("bean을 소멸합니다.");
if (!file.delete()) {
System.out.println("에러: 파일 삭제에 실패하였습니다.");
}
System.out.println("파일 존재 여부: " + file.exists());
}
public void setFilePath(String filePath) {
this.filePath = filePath;
}
public static void main(String... args) throws Exception {
GenericXmlApplicationContext ctx = new GenericXmlApplicationContext();
ctx.road("classpath:spring/app-context-xml.xml");
ctx.refresh();
DescructiveBeanWithInterface bean =
(DescructiveBeanWithInterface) ctx.getBean("destructiveBean");
System.out.println("destroy() 호출 시작");
ctx.destroy();
System.out.println("destroy() 호출 종료");
}
}
<beans...>
<!-- DisposableBean 인터페이스를 사용하면서 destroy-method 속성이 사라졌다. -->
<bean id="destructiveBean"
class="com.... DescructiveBeanWithInterface"
p:filePath="...text.txt" />
</beans>