Spring学习之使用关闭钩子销毁bean

Spring中关于bean的销毁有三种方法。分别是1)执行某一方法如destroy()方法,然后在<bean>标签上的destroy-method属性制定方法名就行了。2)实现DisopableBean接口的destroy方法,DispoableBean接口只有一个destroy方法,在bean销毁前调用。代码如下:

public class DestructiveBeanImpl implements DisposableBean{
		public void destroy(){
			//System.out.println("销毁bean");//计入日志等代码
		}
}

3)使用关闭钩子shutdownHook来进行销毁Bean。Spring销毁回调的唯一确定是他们不能被自动出发,要记得在应用关闭之前调用destroySingletons()方法。在java中允许创建一个关闭钩子,他是一个刚好在应用关闭前会被执行的一个线程。这是一个调用BeanFactory的destroySingletons方法的最佳途径。最简单的方法就是创建一个实现了Runnable接口的类,并在run()方法中调用destroySingletons()。代码清单如下:

public class ShutdownHook implements Runnable{
		private ConfigurableListableBeanFactory beanfactory;
		public ShudownHook(ConfigurableListableBeanFactory beanfactory){
			Assert.notNull(beanfactroy, "The 'beanfactory' argument must not be null." );
			this.beanfactory = beanfactory;
		}
		public void run(){  //重写Runnable中的run方法并在此销毁bean
			this.beanfactory.destroySingletons();
		}
}

注册关闭钩子代码如下:

public class ShtdownHookDemo {
		public static void main(String[] args) throws IOException {
			XmlBeanFactory factory = new XmlBeanFactory( new ClassPathResource( "/META-INF/spring/lifecycle-context.xml"));
			Runtime.getRuntime().addShutdownHook( nwe Thread( new ShutdownHook(factory)));  //得到Runtime的引用并注册关闭钩子
			new BufferendInputStream(System.in).read();
		}
}

最后destroySingletons()方法确实已被调用,尽管我们并未编写任何代码在应用程序要关闭时明确调用的该方法。这就是模板方法设计模式中的钩子。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值