日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring容器实例bean中的几个关键PostProcessor

發布時間:2024/9/30 javascript 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring容器实例bean中的几个关键PostProcessor 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文從幾個spring提供的關鍵的PostProcessor處理器,來幫助理解spring創建bean的過程:

下面是按方法執行的前后順序排列

  • BeanFactoryPostProcessor.postProcessBeanFactory()

    用來在所有的bean definitions加載后,但是還沒有實例化bean之前調用本方法,所以本方法非常超前執行
    可以修改bean的定義,如是否是單例,是否lazy init,DependsOn,FactoryBeanName等等等等,一般用來修改屬性值,一個典型的實現是PropertyResourceConfigurer,用來從配置文件里加載屬性放進bean里,或者更換${…}placeHolder

  • bean的構造方法
  • BeanPostProcessor.postProcessBeforeInitialization()

    在bean進行初始化方法(如InitializingBean.afterPropertiesSet或者自定義的init方法@PostConstruct)的回調之前調用
    調用此方法時,bean的屬性值已經設置好
    可以返回一個包裝類

  • @PostConstruct

    用來標注在bean的方法上,在依賴注入后,放入spring容器前執行一些init邏輯(init方法中可以使用依賴屬性)。一個bean中只能有一個@PostConstruct
    然后注意,這是java規定的注解!!
    如果在攔截器中,(沒見過這個用法,不太懂)
    必須有InvocationContext方法參數,可以有Object返回值
    如果不是在攔截器類中:
    不能有返回值和方法參數
    標注的方法可以是public, protected,package private or private
    可以是final的
    不能拋出運行時異常,會導致容器啟動失敗

  • InitializingBean.afterPropertiesSet()

    用來BeanFactory將bean的所有屬性都設置后,執行一些init邏輯或者只是check屬性是否正確和缺失。

  • BeanPostProcessor.postProcessAfterInitialization()

    在bean執行初始化方法(如InitializingBean.afterPropertiesSet或者自定義的init方法@PostConstruct之后調用
    調用此方法時,bean的屬性值已經設置好
    可以返回一個包裝類
    可能被多次調用

  • SmartInitializingSingleton

    這個接口可以被一個單例的bean實現,在BeanFactory實例化所有單例bean之后執行。
    一般用來執行一些init邏輯,在想要急切獲取其他bean時可以用來替換InitializingBean.afterPropertiesSet()的方案

  • SmartLifecycle.start()

    Lifecycle接口的擴展,用來實現想在容器啟動刷新,或者shutdown時執行一些邏輯。
    isAutoStartup()用來表示在容器刷新時這個bean是否啟動,否則只有容器start時重新創建
    stop(Runnable)用于需要異步的關閉邏輯,必須要調用callback.run()
    Phased用于控制多個bean的啟動順序,value較小的會先啟動,shutdown時會后關閉。
    如ComponentB依賴componentA先啟動,則componentA.phase()應該返回一個較小的值,關閉時B會先關閉。
    如果明確指定depends-on,以depends-on為準。
    任何沒有實現SmartLifecycle的bean的phase會是0,這也就意味著如果SmartLifecycle Bean的phase返回負數,將優先于所有的容器bean啟動,正數反之。
    SmartLifecycle的DEFAULT_PHASE = Integer.MAX_VALUE;

總結

以上是生活随笔為你收集整理的Spring容器实例bean中的几个关键PostProcessor的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。