资讯专栏INFORMATION COLUMN

Spring Bean 生命周期之destroy——终极信仰

JouyPub / 3168人阅读

摘要:上一篇文章生命周期之我从哪里来说明了我是谁和我从哪里来的两大哲学问题,今天我们要讨论一下终极哲学我要到哪里去初始化有三种方式销毁同样有三种方式正所谓,天对地,雨对风对对对雷隐隐,雾蒙蒙山花对海树,赤日对苍穹平仄平仄平平仄,仄平仄平仄

上一篇文章 Spring Bean 生命周期之我从哪里来 说明了我是谁?我从哪里来? 的两大哲学问题,今天我们要讨论一下终极哲学我要到哪里去?

初始化 Spring Bean 有三种方式:

@PostConstruct

InitializingBean.afterPropertiesSet()

init-method

销毁 Spring Bean 同样有三种方式:

@PreDestroy

DisposableBean.destroy()

destroy-method

正所谓,天对地,雨对风; @PostConstruct 对 @PreDestroy;InitializingBean.afterPropertiesSet() 对 DisposableBean.destroy(); init-method 对 destroy-method;雷隐隐,雾蒙蒙;山花对海树,赤日对苍穹;平仄平仄平平仄,仄平仄平仄仄平,仄仄平……

感觉讲到这没必要讲下去了,一切清晰明了,但我还有话要说

当 Spring Ioc 容器要移除 bean 时,销毁相关回调方法将会被执行,这么做的目的时释放被 bean 持有的资源,或者去执行一些终极任务. 当 ApplicationContext 调用 registerShutdownHook 方法时,这些销毁方法就会被触发,但一般正常的业务中很少会用到这些方法

接下来具体的展示一下三种方法的使用方式

三种销毁 Spring Bean 的方式 DisposableBean

Spring 为我们提供了 DisposableBean 接口

我们可以通过实现 DisposableBean 接口,在其唯一方法 destroy 内完成 bean 销毁的工作,但是 Spring Framework 官方并不建议我们通过这种方法来销毁 bean,这同样是一种强耦合的方式,我们看到框架层面才会用到这个方法。

@PreDestroy

这种方式是 Spring 非常提倡的一种方式,我们通常将其标记在方法上即可,通常习惯将这个方法起名为 destory()

destroy-method

同样是两种方式,第一种方式:

第二种方式

以上三种 Bean 的销毁方式也是可以组合使用的,那么组合在一起的调用顺序是什么呢?

首先 @PreDestroy 会被调用

其次 DisposableBean.destroy() 会被调用

最后调用通过 XML 配置的 destroy-method 方法或通过设置 @Bean 注解 设置 destroyMethod 属性的方法

用图示来说明一下调用顺序

这个调用顺序也不难记忆

PreDestroy (P),destroy (D),destroy-method (D) ---> PDD (那个3亿人都在 pin 的那个 APP 名称,目前 3 亿人中没有我)

再来看看 Spring Bean 生命周期图,我们已经点亮了核心部分:

我们要注意,在销毁的过程并没有类似 BeanPostProcess 那中切面的思想,这里要注意到区别。

灵魂追问

在阅读框架源码时,哪些地方用到了 bean 的销毁方法?

还没有被点亮的地方,你认为还有哪些内容没有做?

提高效率工具

推荐阅读

面试还不知道 BeanFactory 和 ApplicationContext 的区别?

Spring Bean 生命周期之"我从哪里来?",懂得这个很重要

Spring Bean 生命周期之"我要到哪里去?"

如何设计好的RESTful API

轻松高效玩转DTO(Data Transfer Object)

欢迎持续关注公众号:「日拱一兵」

前沿 Java 技术干货分享

高效工具汇总

面试问题分析与解答

技术资料领取

后续会出一系列文章点亮上图,同时进行 Spring 知识点解释与串联,在工作中充分利用 Spring 的特性
另外,还会推出 Java 多线程与 ElasticSearch 相关内容

持续关注,带你像读侦探小说一样轻松趣味学习 Java 技术栈相关知识

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/75307.html

相关文章

  • Spring Aware 到底是什么?

    摘要:代码示例自定义实现注册运行和预想一样,输出结果为,如果移除掉注解的属性,输出结果为总结在大多数情况下,我们应该避免使用任何接口,除非我们需要它们。 showImg(https://segmentfault.com/img/remote/1460000019807821?w=1920&h=1080); 通过如下前序两篇文章: Spring Bean 生命周期之我从哪里来? Spring...

    mingzhong 评论0 收藏0
  • Learn Spring - Spring IoC

    摘要:事件事件监听器,对监听到的事件进行处理。拥有一个成员变量,提供了容器监听器的注册表。注册事件监听器根据反射机制,使用的方法,从中找出所有实现的,将它们注册为容器的事件监听器,实际的操作就是将其添加到事件广播器所提供的监听器注册表中。 1. Spring的资源抽象接口 假如有一个文件位于Web应用的类路径下,用户可以通过以下方式对这个文件资源进行访问: 通过FileSystemReso...

    luzhuqun 评论0 收藏0
  • spring提供的关于bean生命周期的接口

    摘要:在中注入注入运行结果注入使用注解正如其名在构造器之后,即在销毁之前。调用的方法构造器注入属性注入顾名思义,在这个方法里面可以拿到所有装载的并在初始化之前对某些进行修改。 先看一张图:spring4.x 企业实战 showImg(https://segmentfault.com/img/bVbbO72?w=608&h=502); spring版本:4.3.171、bean自身的生命周期接...

    Cciradih 评论0 收藏0
  • Spring详解2.理解IoC容器

    摘要:目前建议使用与。入參是当前正在处理的,是当前的配置名,返回的对象为处理后的。如果,则将放入容器的缓存池中,并返回。和这两个接口,一般称它们的实现类为后处理器。体系结构让容器拥有了发布应用上下文事件的功能,包括容器启动事件关闭事件等。 点击进入我的博客 1 如何理解IoC 1.1 依然是KFC的案例 interface Burger { int getPrice(); } in...

    Ververica 评论0 收藏0
  • Bean生命周期回调

    摘要:如果该方法的返回值代替原本该生成的目标对象,后续只有方法会调用,其它方法不再调用否则按照正常的流程走方法在目标对象实例化之后调用,这个时候对象已经被实例化,但是该实例的属性还未被设置,都是。 我们可能会在 Bean 对象创建完成后, 执行某些操作或在销毁前做某些操作. 我们可以实现 InitializingBean 或 DisposableBean 接口 public class Te...

    xorpay 评论0 收藏0

发表评论

0条评论

JouyPub

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<