springboot啟動前執(zhí)行方法的四種方式總結(jié)
第一種 @PostConstruct注解
@Configuration public class Test1 { @Autowired private Environment environment; @PostConstruct public void test(){ String property = environment.getProperty("aaa.bbb"); System.out.println("test1"+property); } }
第二種 實現(xiàn)InitializingBean接口
@Configuration public class Test2 implements InitializingBean { @Autowired private Environment environment; @Override public void afterPropertiesSet() throws Exception { String property = environment.getProperty("aaa.bbb"); System.out.println("test2"+property); } }
第三種 實現(xiàn)BeanPostProcessor接口
@Configuration public class Test3 implements BeanPostProcessor { @Autowired private Environment environment; @Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { String property = environment.getProperty("aaa.bbb"); System.out.println("test3"+property); return bean; } @Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { return bean; } }
第四種 在啟動類run之前執(zhí)行方法
@SpringBootApplication public class DemoApplication { public static void main(String[] args) { System.out.println("test4"); SpringApplication.run(DemoApplication.class, args); } }
當(dāng)然這是不可取的
他們運行的優(yōu)先級是
啟動類前->BeanPostProcessor->@PostConstruct->InitializingBean
值得注意的是第三種方式,他可以讓實現(xiàn)類里的方法提前執(zhí)行
同樣的使用@PostConstruct的兩個類
@Configuration public class Test1 { @PostConstruct public void test(){ System.out.println("test1"); } }
第一個沒有實現(xiàn)BeanPostProcessor接口
@Configuration public class Test3 implements BeanPostProcessor { @Autowired private Environment environment; @PostConstruct public void test(){ System.out.println("test3"); } }
第二個實現(xiàn)了BeanPostProcessor接口,但是沒有重寫他的方法
打印結(jié)果如下
可以看到同樣是使用了@PostConstruct注解,但是他們的執(zhí)行順序卻截然不同
BeanPostProcessor為每一個spring維護的對象調(diào)用前后做操作,具體可以參照這篇博文
www.dbjr.com.cn/article/234143.htm
知道了啟動時的加載順序,對我們做一些初始化工作有幫助。
總結(jié)
到此這篇關(guān)于springboot啟動前執(zhí)行方法的四種方式的文章就介紹到這了,更多相關(guān)springboot啟動前執(zhí)行方法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 詳解SpringBoot啟動項目后執(zhí)行方法的幾種方式
- SpringBoot項目啟動執(zhí)行任務(wù)的多種方法小結(jié)
- SpringBoot實現(xiàn)啟動項目后立即執(zhí)行的方法總結(jié)
- springboot項目啟動后執(zhí)行方法的三種方式
- Springboot啟動后立即某個執(zhí)行方法的四種方式
- SpringBoot啟動時自動執(zhí)行代碼的幾種實現(xiàn)方式
- Springboot啟動執(zhí)行特定代碼的方式匯總
- springboot 項目容器啟動后如何自動執(zhí)行指定方法
- Springboot項目啟動成功后可通過五種方式繼續(xù)執(zhí)行
相關(guān)文章
Java 數(shù)據(jù)結(jié)構(gòu)與算法系列精講之背包問題
背包問題是一個非常典型的考察動態(tài)規(guī)劃應(yīng)用的題目,對其加上不同的限制和條件,可以衍生出諸多變種,若要全面理解動態(tài)規(guī)劃,就必須對背包問題了如指掌2022-02-02jackson json序列化實現(xiàn)首字母大寫,第二個字母需小寫
這篇文章主要介紹了jackson json序列化實現(xiàn)首字母大寫,第二個字母需小寫方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06淺談spring-boot-rabbitmq動態(tài)管理的方法
這篇文章主要介紹了淺談spring-boot-rabbitmq動態(tài)管理的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-12-12MyBatis游標(biāo)Cursor在Oracle數(shù)據(jù)庫上的測試方式
這篇文章主要介紹了MyBatis游標(biāo)Cursor在Oracle數(shù)據(jù)庫上的測試方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01myeclipse開發(fā)servlet_動力節(jié)點Java學(xué)院整理
MyEclipse,是在eclipse基礎(chǔ)上加上自己的插件開發(fā)而成的功能強大的企業(yè)級集成開發(fā)環(huán)境,主要用于Java、Java EE以及移動應(yīng)用的開發(fā)。下面這篇文章主要給大家介紹了關(guān)于myeclipse開發(fā)servlet的相關(guān)資料,需要的朋友可以參考下。2017-07-07導(dǎo)致MyEclipse內(nèi)存不足的原因分析及解決辦法
這篇文章主要介紹了導(dǎo)致MyEclipse內(nèi)存不足的原因分析及解決辦法的相關(guān)資料,需要的朋友可以參考下2016-01-01springboot?@PostConstruct無效的解決
這篇文章主要介紹了springboot?@PostConstruct無效的解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11