Spring初始化之ApplicationRunner、InitializingBean、@PostConstruct執行順序問題 (附項目例子圖片)



前言
因為要用到Spring的初始化加載bean,比如Spring上下文的獲取類應該優先加載,監聽什么的類應該在啟動后加載,所以考慮先后順序,所以研究一下ApplicationRunner、InitializingBean、@PostConstruct的執行先后順序問題

一、ApplicationRunner 接口的用法
ApplicationRunner : 是一個接口,里面定義一個run(ApplicationArguments args)方法,我們需要自己寫一個類去實現這個這接口,並實現接口里面的run(ApplicationArguments args)方法。

例如下圖:

 

 

二、InitializingBean接口的用法
InitializingBean接口為bean提供了初始化方法的方式,它只包括afterPropertiesSet方法,凡是繼承該接口的類,在初始化bean的時候都會執行該方法。注意,實現該接口的最好加上Spring的注解注入,比如@Component

例如下圖:

 

 

 

 

三、@PostConstruct注解的用法
如果想在生成對象時候完成某些初始化操作,而偏偏這些初始化操作又依賴於依賴注入,那么就無法在構造函數中實現。為此,可以使用@PostConstruct注解一個方法來完成初始化,@PostConstruct注解的方法將會在依賴注入完成后被自動調用。
優先級:
Constructor >> @Autowired >> @PostConstruct
具體請參考:@PostConstruct注解的使用

例如下圖:

 

 

三者在Spring項目啟動的執行順序:

由此可知: @PostConstruct>InitializingBean>ApplicationRunner

例如下圖 : 

 

 

 

 

 

 

所以各位使用的時候當心了, 使用不當容易造成未知的問題哦!

原文鏈接:https://blog.csdn.net/moneyshi/article/details/108864172


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM