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