Bean Lifecycle DisposableBean
File: Main.java import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; import org.springframework.beans.factory.xml.XmlBeanFactory; import org.springframework.core.io.ClassPathResource; import org.springframework.util.Assert; public class Main { public static void main(String[] args) throws Exception { XmlBeanFactory factory = new XmlBeanFactory(new ClassPathResource("context.xml")); Runtime.getRuntime().addShutdownHook(new Thread(new ShutdownHook(factory))); } } class ShutdownHook implements Runnable { private ConfigurableListableBeanFactory beanFactory; public ShutdownHook(ConfigurableListableBeanFactory beanFactory) { Assert.notNull(beanFactory, "The 'beanFactory' argument must not be null."); this.beanFactory = beanFactory; } public void run() { this.beanFactory.destroySingletons(); } } class DestructiveBeanI implements InitializingBean, DisposableBean { public void afterPropertiesSet() throws Exception { } public void destroy() { System.out.println("Destroying Bean"); } @Override public String toString() { final StringBuilder sb = new StringBuilder(); sb.append("DestructiveBean"); return sb.toString(); } } File: context.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="destructive" class="DestructiveBeanI"> <property name="filePath" value="/tmp"/> </bean> </beans>