Java/Spring/IoC Shutdown
Dispose Interface
<source lang="java">
/* Pro Spring By Rob Harrop Jan Machacek ISBN: 1-59059-461-4 Publisher: Apress
- /
/////////////////////////////////////////////////////////////////////////////////////// //File: disposeMethod.xml <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans>
<bean id="destructiveBean" class="DestructiveBeanWithInterface"> <property name="filePath"> <value>c:/test.txt</value> </property> </bean>
</beans> /////////////////////////////////////////////////////////////////////////////////////// import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; 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.FileSystemResource; public class DestructiveBean implements InitializingBean {
private InputStream is = null; public String filePath = null; public void afterPropertiesSet() throws Exception { System.out.println("Initializing Bean"); if (filePath == null) { throw new IllegalArgumentException( "You must specify the filePath property of " + DestructiveBean.class); } is = new FileInputStream(filePath); } public void destroy() { System.out.println("Destroying Bean"); if (is != null) { try { is.close(); is = null; } catch (IOException ex) { System.err.println("WARN: An IOException occured" + " trying to close the InputStream"); } } } public void setFilePath(String filePath) { this.filePath = filePath; }
} /////////////////////////////////////////////////////////////////////////////////////// import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; 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.FileSystemResource; public class DestructiveBeanWithInterface implements InitializingBean,
DisposableBean { private InputStream is = null; public String filePath = null; public void afterPropertiesSet() throws Exception { System.out.println("Initializing Bean"); if (filePath == null) { throw new IllegalArgumentException( "You must specify the filePath property of " + DestructiveBean.class); } is = new FileInputStream(filePath); } public void destroy() { System.out.println("Destroying Bean"); if (is != null) { try { is.close(); is = null; } catch (IOException ex) { System.err.println("WARN: An IOException occured" + " trying to close the InputStream"); } } } public void setFilePath(String filePath) { this.filePath = filePath; } public static void main(String[] args) throws Exception { ConfigurableListableBeanFactory factory = new XmlBeanFactory( new FileSystemResource( "build/disposeInterface.xml")); DestructiveBeanWithInterface bean = (DestructiveBeanWithInterface) factory.getBean("destructiveBean"); System.out.println("Calling destroySingletons()"); factory.destroySingletons(); System.out.println("Called destroySingletons()"); }
}
</source>
Shutdown Hook Bean Example
<source lang="java">
/* Pro Spring By Rob Harrop Jan Machacek ISBN: 1-59059-461-4 Publisher: Apress
- /
/////////////////////////////////////////////////////////////////////////////////////// //File: shutdownHookBean.xml <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans>
<bean id="destructiveBean" class="DestructiveBeanWithInterface"> <property name="filePath"> <value>c:/test.txt</value> </property> </bean> <bean id="shutdownHook" class="ShutdownHookBean"/>
</beans> /////////////////////////////////////////////////////////////////////////////////////// import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; 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.FileSystemResource; public class DestructiveBeanWithInterface implements InitializingBean,
DisposableBean { private InputStream is = null; public String filePath = null; public void afterPropertiesSet() throws Exception { System.out.println("Initializing Bean"); if (filePath == null) { throw new IllegalArgumentException( "You must specify the filePath property of " + DestructiveBean.class); } is = new FileInputStream(filePath); } public void destroy() { System.out.println("Destroying Bean"); if (is != null) { try { is.close(); is = null; } catch (IOException ex) { System.err.println("WARN: An IOException occured" + " trying to close the InputStream"); } } } public void setFilePath(String filePath) { this.filePath = filePath; }
} /////////////////////////////////////////////////////////////////////////////////////// import org.springframework.beans.BeansException; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.BeanFactoryAware; import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; public class ShutdownHookBean implements BeanFactoryAware,
Runnable { private ConfigurableListableBeanFactory factory; public void setBeanFactory(BeanFactory factory) throws BeansException { if (factory instanceof ConfigurableListableBeanFactory) { this.factory = (ConfigurableListableBeanFactory) factory; Runtime.getRuntime().addShutdownHook(new Thread(this)); } } public void run() { if (factory != null) { System.out.println("Destroying Singletons"); factory.destroySingletons(); System.out.println("Singletons Destroyed"); } }
} /////////////////////////////////////////////////////////////////////////////////////// import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; 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.FileSystemResource; public class DestructiveBean implements InitializingBean {
private InputStream is = null; public String filePath = null; public void afterPropertiesSet() throws Exception { System.out.println("Initializing Bean"); if (filePath == null) { throw new IllegalArgumentException( "You must specify the filePath property of " + DestructiveBean.class); } is = new FileInputStream(filePath); } public void destroy() { System.out.println("Destroying Bean"); if (is != null) { try { is.close(); is = null; } catch (IOException ex) { System.err.println("WARN: An IOException occured" + " trying to close the InputStream"); } } } public void setFilePath(String filePath) { this.filePath = filePath; }
} /////////////////////////////////////////////////////////////////////////////////////// import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; import org.springframework.beans.factory.xml.XmlBeanFactory; import org.springframework.core.io.FileSystemResource; public class ShutdownHookBeanExample {
public static void main(String[] args) { ConfigurableListableBeanFactory factory = new XmlBeanFactory( new FileSystemResource( "build/shutdownHook.xml")); // make sure the shutdown hook is created factory.preInstantiateSingletons(); DestructiveBeanWithInterface bean = (DestructiveBeanWithInterface) factory.getBean("destructiveBean"); }
}
</source>
Shutdown Hook Example
<source lang="java">
/* Pro Spring By Rob Harrop Jan Machacek ISBN: 1-59059-461-4 Publisher: Apress
- /
/////////////////////////////////////////////////////////////////////////////////////// //File: disposeInterface.xml <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans>
<bean id="destructiveBean" class="DestructiveBeanWithInterface"> <property name="filePath"> <value>c:/test.txt</value> </property> </bean>
</beans> /////////////////////////////////////////////////////////////////////////////////////// import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; public class ShutdownHook implements Runnable {
private ConfigurableListableBeanFactory factory; public ShutdownHook(ConfigurableListableBeanFactory factory) { this.factory = factory; } public void run() { System.out.println("Destroying Singletons"); factory.destroySingletons(); System.out.println("Singletons Destroyed"); }
} /////////////////////////////////////////////////////////////////////////////////////// import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; 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.FileSystemResource; public class DestructiveBeanWithInterface implements InitializingBean,
DisposableBean { private InputStream is = null; public String filePath = null; public void afterPropertiesSet() throws Exception { System.out.println("Initializing Bean"); if (filePath == null) { throw new IllegalArgumentException( "You must specify the filePath property of " + DestructiveBean.class); } is = new FileInputStream(filePath); } public void destroy() { System.out.println("Destroying Bean"); if (is != null) { try { is.close(); is = null; } catch (IOException ex) { System.err.println("WARN: An IOException occured" + " trying to close the InputStream"); } } } public void setFilePath(String filePath) { this.filePath = filePath; } public static void main(String[] args) throws Exception { ConfigurableListableBeanFactory factory = new XmlBeanFactory( new FileSystemResource( "build/disposeInterface.xml")); DestructiveBeanWithInterface bean = (DestructiveBeanWithInterface) factory.getBean("destructiveBean"); System.out.println("Calling destroySingletons()"); factory.destroySingletons(); System.out.println("Called destroySingletons()"); }
} /////////////////////////////////////////////////////////////////////////////////////// import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; 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.FileSystemResource; public class DestructiveBean implements InitializingBean {
private InputStream is = null; public String filePath = null; public void afterPropertiesSet() throws Exception { System.out.println("Initializing Bean"); if (filePath == null) { throw new IllegalArgumentException( "You must specify the filePath property of " + DestructiveBean.class); } is = new FileInputStream(filePath); } public void destroy() { System.out.println("Destroying Bean"); if (is != null) { try { is.close(); is = null; } catch (IOException ex) { System.err.println("WARN: An IOException occured" + " trying to close the InputStream"); } } } public void setFilePath(String filePath) { this.filePath = filePath; }
} ///////////////////////////////////////////////////////////////////////////////////////
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; import org.springframework.beans.factory.xml.XmlBeanFactory; import org.springframework.core.io.FileSystemResource; public class ShutdownHookExample {
public static void main(String[] args) { ConfigurableListableBeanFactory factory = new XmlBeanFactory( new FileSystemResource( "build/disposeInterface.xml")); Runtime.getRuntime().addShutdownHook( new Thread(new ShutdownHook(factory))); DestructiveBeanWithInterface bean = (DestructiveBeanWithInterface) factory.getBean("destructiveBean"); }
}
</source>