Spring中的InitializingBean接口的使用

問(wèn)題:前一段時(shí)間在項(xiàng)目中需要在項(xiàng)目初始化的時(shí)候,對(duì)一些常用數(shù)據(jù)進(jìn)行緩存,我的第一反應(yīng)是監(jiān)聽(tīng)器,所以使用了java的ServletContextListener全局異常監(jiān)聽(tīng)器,但是出現(xiàn)了一個(gè)問(wèn)題,就是項(xiàng)目使用的spring,而ServletContextListener監(jiān)聽(tīng)器是監(jiān)聽(tīng)的tomcat的啟動(dòng)過(guò)程,而不是spring容器,所以使用ServletContextListener導(dǎo)致spring中bean還未初始化成功,便執(zhí)行了監(jiān)聽(tīng)器中的緩存,導(dǎo)致空指針異常,所以今天記錄一下后面的解決辦法!

1.使用spring中的InitializingBean接口,監(jiān)聽(tīng)spring的啟動(dòng)過(guò)程,在spring裝載完所有的bean的時(shí)候,會(huì)自動(dòng)調(diào)用實(shí)現(xiàn)InitializingBean的afterPropertiesSet()方法,在里面去調(diào)用初始化用的服務(wù)或者邏輯就行。 后面再了解的時(shí)候又看到了關(guān)于InitializingBean和init-method方法在初始化bean的的一些介紹,所以這里就一并記錄下。

InitializingBean的afterPropertiesSet和init-method相同點(diǎn)是都是初始化方法使用的,但是這里問(wèn)題是他們誰(shuí)先執(zhí)行?

初始化代碼如下


QQ圖片20181009122728.png

init-method配置


QQ圖片20181009122948.png

看執(zhí)行打印結(jié)果


QQ圖片20181009123106.png

可以看到,先執(zhí)行InitializingBean的afterPropertiesSet方法,而后執(zhí)行init-method方法,可以從中得出幾點(diǎn)總結(jié)

1、Spring為bean提供了兩種初始化bean的方式,實(shí)現(xiàn)InitializingBean接口,實(shí)現(xiàn)afterPropertiesSet方法,或者在配置文件中通過(guò)init-method指定,兩種方式可以同時(shí)使用。

2、實(shí)現(xiàn)InitializingBean接口是直接調(diào)用afterPropertiesSet方法,比通過(guò)反射調(diào)用init-method指定的方法效率要高一點(diǎn),但是init-method方式消除了對(duì)spring的依賴(lài)。

3、如果調(diào)用afterPropertiesSet方法時(shí)出錯(cuò),則不調(diào)用init-method指定的方法。

以此記錄,見(jiàn)證自己的成長(zhǎng),方便自己查閱,不喜勿噴

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.1 spring IoC容器和beans的簡(jiǎn)介 Spring 框架的最核心基礎(chǔ)的功能是IoC(控制反轉(zhuǎn))容器,...
    simoscode閱讀 6,851評(píng)論 2 22
  • 本文是我自己在秋招復(fù)習(xí)時(shí)的讀書(shū)筆記,整理的知識(shí)點(diǎn),也是為了防止忘記,尊重勞動(dòng)成果,轉(zhuǎn)載注明出處哦!如果你也喜歡,那...
    波波波先森閱讀 12,444評(píng)論 6 86
  • 1.1 Spring IoC容器和bean簡(jiǎn)介 本章介紹了Spring Framework實(shí)現(xiàn)的控制反轉(zhuǎn)(IoC)...
    起名真是難閱讀 2,672評(píng)論 0 8
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,555評(píng)論 19 139
  • 本來(lái)是準(zhǔn)備看一看Spring源碼的。然后在知乎上看到來(lái)一個(gè)帖子,說(shuō)有一群**自己連Spring官方文檔都沒(méi)有完全讀...
    此魚(yú)不得水閱讀 7,044評(píng)論 4 21

友情鏈接更多精彩內(nèi)容