File: context.xml
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">
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();
}
}