Spring中Bean资源回收的几种方式

167 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 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-methodBean对象销毁前同样会调用被@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()来实现资源的回收;