=================== 对象的生命周期_销毁 =================== Spring工厂在销毁对象前会调用对象的销毁方法,完成销毁操作 - Spring工厂在ClassPathXmlApplicationContext.close()方法中被关闭,此时销毁其中的对象 - 销毁方法由程序设计者提供 - 销毁方法由Spring工厂调用 程序设计者如何提供销毁方法? 1 第一种方式 实现DisposableBean接口,覆盖destroy()方法,将销毁对象的代码写在这个方法里,等着Spring工厂来调用。 /src/main/java/cn/tedu/injection/Product.java: public class Product implements InitializingBean, DisposableBean { ... @Override public void destroy() throws Exception { logger.debug("Product.destroy"); } ... } Before ApplicationContext Product.Product Product.setName Product.afterPropertiesSet Product.init After ApplicationContext Before getBean After getBean cn.tedu.injection.Product@13fd2ccd Product.destroy <- Spring工厂调用接口中的销毁方法 例程:Injection 2 第二种方式 实现DisposableBean接口,也是一种来自Spring的侵入。 随便定义一个方法执行销毁操作,通过配置文件告知Spring在销毁对象时调用该方法。 /src/main/java/cn/tedu/injection/Product.java: public class Product implements InitializingBean { ... public void deinit() { logger.debug("Product.deinit"); } ... } /src/main/resources/applicationContext.xml: Before ApplicationContext Product.Product Product.setName Product.afterPropertiesSet Product.init After ApplicationContext Before getBean After getBean cn.tedu.injection.Product@48aca48b Product.deinit <- Spring工厂调用自定义的销毁方法 例程:Injection