Spring Bean 生命週期之destroy——終極信仰

上一篇文章 Spring Bean 生命週期之我從哪裏來 說明了我是誰?我從哪裏來? 的兩大哲學問題,今天咱們要討論一下終極哲學我要到哪裏去?

初始化 Spring Bean 有三種方式:java

  1. @PostConstruct
  2. InitializingBean.afterPropertiesSet()
  3. init-method

銷燬 Spring Bean 一樣有三種方式:面試

  1. @PreDestroy
  2. DisposableBean.destroy()
  3. destroy-method

正所謂,天對地,雨對風; @PostConstruct 對 @PreDestroy;InitializingBean.afterPropertiesSet() 對 DisposableBean.destroy(); init-method 對 destroy-method;雷隱隱,霧濛濛;山花對海樹,赤日對蒼穹;平仄平仄平平仄,仄平仄平仄仄平,仄仄平……spring

感受講到這不必講下去了,一切清晰明瞭,但我還有話要說多線程

當 Spring Ioc 容器要移除 bean 時,銷燬相關回調方法將會被執行,這麼作的目的時釋放被 bean 持有的資源,或者去執行一些終極任務. 當 ApplicationContext 調用 registerShutdownHook 方法時,這些銷燬方法就會被觸發,但通常正常的業務中不多會用到這些方法框架

接下來具體的展現一下三種方法的使用方式工具

三種銷燬 Spring Bean 的方式

DisposableBean

Spring 爲咱們提供了 DisposableBean 接口學習

咱們能夠經過實現 DisposableBean 接口,在其惟一方法 destroy 內完成 bean 銷燬的工做,可是 Spring Framework 官方並不建議咱們經過這種方法來銷燬 bean,這一樣是一種強耦合的方式,咱們看到框架層面纔會用到這個方法。線程

@PreDestroy

這種方式是 Spring 很是提倡的一種方式,咱們一般將其標記在方法上便可,一般習慣將這個方法起名爲 destory()設計

destroy-method

一樣是兩種方式,第一種方式:3d

第二種方式

以上三種 Bean 的銷燬方式也是能夠組合使用的,那麼組合在一塊兒的調用順序是什麼呢?

  1. 首先 @PreDestroy 會被調用
  2. 其次 DisposableBean.destroy() 會被調用
  3. 最後調用經過 XML 配置的 destroy-method 方法或經過設置 @Bean 註解 設置 destroyMethod 屬性的方法

用圖示來講明一下調用順序

這個調用順序也不難記憶

PreDestroy (P),destroy (D),destroy-method (D) ---> PDD (那個3億人都在 pin 的那個 APP 名稱,目前 3 億人中沒有我)

再來看看 Spring Bean 生命週期圖,咱們已經點亮了核心部分:

咱們要注意,在銷燬的過程並無相似 BeanPostProcess 那中切面的思想,這裏要注意到區別。

靈魂追問

  1. 在閱讀框架源碼時,哪些地方用到了 bean 的銷燬方法?
  2. 尚未被點亮的地方,你認爲還有哪些內容沒有作?

提升效率工具


推薦閱讀


歡迎持續關注公衆號:「日拱一兵」

  • 前沿 Java 技術乾貨分享
  • 高效工具彙總
  • 面試問題分析與解答
  • 技術資料領取

後續會出一系列文章點亮上圖,同時進行 Spring 知識點解釋與串聯,在工做中充分利用 Spring 的特性
另外,還會推出 Java 多線程與 ElasticSearch 相關內容

持續關注,帶你像讀偵探小說同樣輕鬆趣味學習 Java 技術棧相關知識

相關文章
相關標籤/搜索