开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第21天,点击查看活动详情
前言
我们在前面的文章中介绍了Spring有几种方式实现资源初始化,在这篇文章中,我们来介绍一下在Spring中,如何实现资源的释放或回收?
和初始化的几种方式类似,资源释放的使用方式也有三种:配置、注解与接口实现,下面就来依次介绍如何使用这几种方式;
配置方式
同样的,我们可以在xml配置中指定Bean对象销毁前需要执行的方法destory-method:
<bean id="userService" class="com.test.service.UserService" destory-method="destory"></bean>
对应的类如下:
package com.test.service;
public class UserService{
public void destory(){
// TODO
// 执行资源回收操;
}
}
注解方式
第二种方式就是在目标方法上添加注解@PreDestory,作用相当于配置了destory-method,Bean对象销毁前同样会调用被@PreDestory注解的方法:
@Service
public class UserService{
@PreDestory
public void destory(){
// TODO
// 执行资源回收
}
}
Spring将收集所有被@PreDestory注解的方法,在Bean对象被销毁前依次调用,它也是通过CommonAnnotationBeanPostProcessor实现的,感兴趣的小伙伴可以自行了解一下;也就是说,其实同一个Bean对象中可以给多个方法设置@PreDestory注解;
实现指定接口
同样的,Spring也提供了接口的方式让开发人员来实现Bean销毁前的清理工作,我们可以通过实现DisposableBean接口里面的destroy()方法来完成资源释放:
@Service
public class UserService implements DisposableBean{
@Override
public void destroy() throws Exception{
// TODO
// 执行资源回收
}
}
注意
和前面的初始化方法一样,带注解方式的销毁方法可以配置多个,配置方式与接口实现的方式只能指定一个销毁方法;
小结
通过上述内容的讲解,我们已经了解了三种实现Bean资源回收的方式:
1.通过
xml配置方式,给Bean对象配置destory-method属性指定资源销毁方法的名称;2.通过给目标方法添加
@PreDestory注解的方法,可以给Bean对象配置多个销毁方法;3.通过实现
DisposableBean接口的destroy()来实现资源的回收;