摘要:上一篇文章生命周期之我從哪里來(lái)說(shuō)明了我是誰(shuí)和我從哪里來(lái)的兩大哲學(xué)問(wèn)題,今天我們要討論一下終極哲學(xué)我要到哪里去初始化有三種方式銷毀同樣有三種方式正所謂,天對(duì)地,雨對(duì)風(fēng)對(duì)對(duì)對(duì)雷隱隱,霧蒙蒙山花對(duì)海樹,赤日對(duì)蒼穹平仄平仄平平仄,仄平仄平仄
上一篇文章 Spring Bean 生命周期之我從哪里來(lái) 說(shuō)明了我是誰(shuí)? 和 我從哪里來(lái)? 的兩大哲學(xué)問(wèn)題,今天我們要討論一下終極哲學(xué)我要到哪里去?
初始化 Spring Bean 有三種方式:
@PostConstruct
InitializingBean.afterPropertiesSet()
init-method
銷毀 Spring Bean 同樣有三種方式:
@PreDestroy
DisposableBean.destroy()
destroy-method
正所謂,天對(duì)地,雨對(duì)風(fēng); @PostConstruct 對(duì) @PreDestroy;InitializingBean.afterPropertiesSet() 對(duì) DisposableBean.destroy(); init-method 對(duì) destroy-method;雷隱隱,霧蒙蒙;山花對(duì)海樹,赤日對(duì)蒼穹;平仄平仄平平仄,仄平仄平仄仄平,仄仄平……
感覺(jué)講到這沒(méi)必要講下去了,一切清晰明了,但我還有話要說(shuō)
當(dāng) Spring Ioc 容器要移除 bean 時(shí),銷毀相關(guān)回調(diào)方法將會(huì)被執(zhí)行,這么做的目的時(shí)釋放被 bean 持有的資源,或者去執(zhí)行一些終極任務(wù). 當(dāng) ApplicationContext 調(diào)用 registerShutdownHook 方法時(shí),這些銷毀方法就會(huì)被觸發(fā),但一般正常的業(yè)務(wù)中很少會(huì)用到這些方法
接下來(lái)具體的展示一下三種方法的使用方式
三種銷毀 Spring Bean 的方式 DisposableBeanSpring 為我們提供了 DisposableBean 接口
我們可以通過(guò)實(shí)現(xiàn) DisposableBean 接口,在其唯一方法 destroy 內(nèi)完成 bean 銷毀的工作,但是 Spring Framework 官方并不建議我們通過(guò)這種方法來(lái)銷毀 bean,這同樣是一種強(qiáng)耦合的方式,我們看到框架層面才會(huì)用到這個(gè)方法。
@PreDestroy這種方式是 Spring 非常提倡的一種方式,我們通常將其標(biāo)記在方法上即可,通常習(xí)慣將這個(gè)方法起名為 destory()
destroy-method同樣是兩種方式,第一種方式:
第二種方式
以上三種 Bean 的銷毀方式也是可以組合使用的,那么組合在一起的調(diào)用順序是什么呢?
首先 @PreDestroy 會(huì)被調(diào)用
其次 DisposableBean.destroy() 會(huì)被調(diào)用
最后調(diào)用通過(guò) XML 配置的 destroy-method 方法或通過(guò)設(shè)置 @Bean 注解 設(shè)置 destroyMethod 屬性的方法
用圖示來(lái)說(shuō)明一下調(diào)用順序
這個(gè)調(diào)用順序也不難記憶
PreDestroy (P),destroy (D),destroy-method (D) ---> PDD (那個(gè)3億人都在 pin 的那個(gè) APP 名稱,目前 3 億人中沒(méi)有我)
再來(lái)看看 Spring Bean 生命周期圖,我們已經(jīng)點(diǎn)亮了核心部分:
我們要注意,在銷毀的過(guò)程并沒(méi)有類似 BeanPostProcess 那中切面的思想,這里要注意到區(qū)別。
靈魂追問(wèn)在閱讀框架源碼時(shí),哪些地方用到了 bean 的銷毀方法?
還沒(méi)有被點(diǎn)亮的地方,你認(rèn)為還有哪些內(nèi)容沒(méi)有做?
提高效率工具 推薦閱讀面試還不知道 BeanFactory 和 ApplicationContext 的區(qū)別?
Spring Bean 生命周期之"我從哪里來(lái)?",懂得這個(gè)很重要
Spring Bean 生命周期之"我要到哪里去?"
如何設(shè)計(jì)好的RESTful API
輕松高效玩轉(zhuǎn)DTO(Data Transfer Object)
歡迎持續(xù)關(guān)注公眾號(hào):「日拱一兵」前沿 Java 技術(shù)干貨分享
高效工具匯總
面試問(wèn)題分析與解答
技術(shù)資料領(lǐng)取
后續(xù)會(huì)出一系列文章點(diǎn)亮上圖,同時(shí)進(jìn)行 Spring 知識(shí)點(diǎn)解釋與串聯(lián),在工作中充分利用 Spring 的特性
另外,還會(huì)推出 Java 多線程與 ElasticSearch 相關(guān)內(nèi)容
持續(xù)關(guān)注,帶你像讀偵探小說(shuō)一樣輕松趣味學(xué)習(xí) Java 技術(shù)棧相關(guān)知識(shí)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/75307.html
摘要:代碼示例自定義實(shí)現(xiàn)注冊(cè)運(yùn)行和預(yù)想一樣,輸出結(jié)果為,如果移除掉注解的屬性,輸出結(jié)果為總結(jié)在大多數(shù)情況下,我們應(yīng)該避免使用任何接口,除非我們需要它們。 showImg(https://segmentfault.com/img/remote/1460000019807821?w=1920&h=1080); 通過(guò)如下前序兩篇文章: Spring Bean 生命周期之我從哪里來(lái)? Spring...
摘要:事件事件監(jiān)聽器,對(duì)監(jiān)聽到的事件進(jìn)行處理。擁有一個(gè)成員變量,提供了容器監(jiān)聽器的注冊(cè)表。注冊(cè)事件監(jiān)聽器根據(jù)反射機(jī)制,使用的方法,從中找出所有實(shí)現(xiàn)的,將它們注冊(cè)為容器的事件監(jiān)聽器,實(shí)際的操作就是將其添加到事件廣播器所提供的監(jiān)聽器注冊(cè)表中。 1. Spring的資源抽象接口 假如有一個(gè)文件位于Web應(yīng)用的類路徑下,用戶可以通過(guò)以下方式對(duì)這個(gè)文件資源進(jìn)行訪問(wèn): 通過(guò)FileSystemReso...
摘要:在中注入注入運(yùn)行結(jié)果注入使用注解正如其名在構(gòu)造器之后,即在銷毀之前。調(diào)用的方法構(gòu)造器注入屬性注入顧名思義,在這個(gè)方法里面可以拿到所有裝載的并在初始化之前對(duì)某些進(jìn)行修改。 先看一張圖:spring4.x 企業(yè)實(shí)戰(zhàn) showImg(https://segmentfault.com/img/bVbbO72?w=608&h=502); spring版本:4.3.171、bean自身的生命周期接...
摘要:目前建議使用與。入?yún)⑹钱?dāng)前正在處理的,是當(dāng)前的配置名,返回的對(duì)象為處理后的。如果,則將放入容器的緩存池中,并返回。和這兩個(gè)接口,一般稱它們的實(shí)現(xiàn)類為后處理器。體系結(jié)構(gòu)讓容器擁有了發(fā)布應(yīng)用上下文事件的功能,包括容器啟動(dòng)事件關(guān)閉事件等。 點(diǎn)擊進(jìn)入我的博客 1 如何理解IoC 1.1 依然是KFC的案例 interface Burger { int getPrice(); } in...
摘要:如果該方法的返回值代替原本該生成的目標(biāo)對(duì)象,后續(xù)只有方法會(huì)調(diào)用,其它方法不再調(diào)用否則按照正常的流程走方法在目標(biāo)對(duì)象實(shí)例化之后調(diào)用,這個(gè)時(shí)候?qū)ο笠呀?jīng)被實(shí)例化,但是該實(shí)例的屬性還未被設(shè)置,都是。 我們可能會(huì)在 Bean 對(duì)象創(chuàng)建完成后, 執(zhí)行某些操作或在銷毀前做某些操作. 我們可以實(shí)現(xiàn) InitializingBean 或 DisposableBean 接口 public class Te...
閱讀 1463·2021-10-08 10:04
閱讀 2800·2021-09-22 15:23
閱讀 2784·2021-09-04 16:40
閱讀 1235·2019-08-29 17:29
閱讀 1562·2019-08-29 17:28
閱讀 3047·2019-08-29 14:02
閱讀 2290·2019-08-29 13:18
閱讀 936·2019-08-23 18:35