摘要:上一篇文章生命周期之我從哪里來說明了我是誰和我從哪里來的兩大哲學問題,今天我們要討論一下終極哲學我要到哪里去初始化有三種方式銷毀同樣有三種方式正所謂,天對地,雨對風對對對雷隱隱,霧蒙蒙山花對海樹,赤日對蒼穹平仄平仄平平仄,仄平仄平仄
上一篇文章 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 的方式 DisposableBeanSpring 為我們提供了 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 技術棧相關知識
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/75307.html
摘要:代碼示例自定義實現注冊運行和預想一樣,輸出結果為,如果移除掉注解的屬性,輸出結果為總結在大多數情況下,我們應該避免使用任何接口,除非我們需要它們。 showImg(https://segmentfault.com/img/remote/1460000019807821?w=1920&h=1080); 通過如下前序兩篇文章: Spring Bean 生命周期之我從哪里來? Spring...
摘要:事件事件監聽器,對監聽到的事件進行處理。擁有一個成員變量,提供了容器監聽器的注冊表。注冊事件監聽器根據反射機制,使用的方法,從中找出所有實現的,將它們注冊為容器的事件監聽器,實際的操作就是將其添加到事件廣播器所提供的監聽器注冊表中。 1. Spring的資源抽象接口 假如有一個文件位于Web應用的類路徑下,用戶可以通過以下方式對這個文件資源進行訪問: 通過FileSystemReso...
摘要:在中注入注入運行結果注入使用注解正如其名在構造器之后,即在銷毀之前。調用的方法構造器注入屬性注入顧名思義,在這個方法里面可以拿到所有裝載的并在初始化之前對某些進行修改。 先看一張圖:spring4.x 企業實戰 showImg(https://segmentfault.com/img/bVbbO72?w=608&h=502); spring版本:4.3.171、bean自身的生命周期接...
摘要:目前建議使用與。入參是當前正在處理的,是當前的配置名,返回的對象為處理后的。如果,則將放入容器的緩存池中,并返回。和這兩個接口,一般稱它們的實現類為后處理器。體系結構讓容器擁有了發布應用上下文事件的功能,包括容器啟動事件關閉事件等。 點擊進入我的博客 1 如何理解IoC 1.1 依然是KFC的案例 interface Burger { int getPrice(); } in...
摘要:如果該方法的返回值代替原本該生成的目標對象,后續只有方法會調用,其它方法不再調用否則按照正常的流程走方法在目標對象實例化之后調用,這個時候對象已經被實例化,但是該實例的屬性還未被設置,都是。 我們可能會在 Bean 對象創建完成后, 執行某些操作或在銷毀前做某些操作. 我們可以實現 InitializingBean 或 DisposableBean 接口 public class Te...
閱讀 1381·2021-10-08 10:04
閱讀 2696·2021-09-22 15:23
閱讀 2727·2021-09-04 16:40
閱讀 1179·2019-08-29 17:29
閱讀 1496·2019-08-29 17:28
閱讀 2994·2019-08-29 14:02
閱讀 2223·2019-08-29 13:18
閱讀 847·2019-08-23 18:35