Spring: 使用关闭钩子销毁bean

102 篇文章 2 订阅

Spring中关于bean的销毁有三种方法。分别是

1)执行某一方法如destroy()方法,然后在<bean>标签上的destroy-method属性制定方法名就行了。

2)实现DisopableBean接口的destroy方法,DispoableBean接口只有一个destroy方法,在bean销毁前调用。代码如下:

[java]  view plain  copy
 print ?
  1. public class DestructiveBeanImpl implements DisposableBean{  
  2.         public void destroy(){  
  3.             //System.out.println("销毁bean");//计入日志等代码  
  4.         }  
  5. }  

3)使用关闭钩子shutdownHook来进行销毁Bean。

Spring销毁回调的唯一确定是他们不能被自动触发,要记得在应用关闭之前调用

ConfigurableListableBeanFactory:destroySingletons()方法,

或者AbstractApplicationContext.registerShutdownHook()


在java中允许创建一个关闭钩子,他是一个刚好在应用关闭前会被执行的一个线程。这是一个调用BeanFactory的destroySingletons方法的最佳途径。最简单的方法就是创建一个实现了Runnable接口的类,并在run()方法中调用destroySingletons()。代码清单如下:

[java]  view plain  copy
 print ?
  1. public class ShutdownHook implements Runnable{  
  2.         private ConfigurableListableBeanFactory beanfactory;  
  3.         public ShudownHook(ConfigurableListableBeanFactory beanfactory){  
  4.             Assert.notNull(beanfactroy, "The 'beanfactory' argument must not be null." );  
  5.             this.beanfactory = beanfactory;  
  6.         }  
  7.         public void run(){  //重写Runnable中的run方法并在此销毁bean  
  8.             this.beanfactory.destroySingletons();  
  9.         }  
  10. }  

注册关闭钩子代码如下:

[java]  view plain  copy
 print ?
  1. public class ShtdownHookDemo {  
  2.         public static void main(String[] args) throws IOException {  
  3.             XmlBeanFactory factory = new XmlBeanFactory( new ClassPathResource( "/META-INF/spring/lifecycle-context.xml"));  
  4.             Runtime.getRuntime().addShutdownHook( nwe Thread( new ShutdownHook(factory)));  //得到Runtime的引用并注册关闭钩子  
  5.             new BufferendInputStream(System.in).read();  
  6.         }  
  7. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值