Spring中的監(jiān)聽(tīng)器SpringApplicationRunListener詳解
SpringApplicationRunListenerde作用
命名我們就可以知道它是一個(gè)監(jiān)聽(tīng)者,分析springboot啟動(dòng)流程我們會(huì)發(fā)現(xiàn),它其實(shí)是用來(lái)在整個(gè)啟動(dòng)流程中接收不同執(zhí)行點(diǎn)事件通知的監(jiān)聽(tīng)者
SpringApplicationRunListener接口規(guī)定了SpringBoot的生命周期,在各個(gè)生命周期廣播相應(yīng)的事件,調(diào)用實(shí)際的ApplicationListener類。
源碼分析
前面分析過(guò),前面講過(guò)啟動(dòng)的時(shí)候會(huì)先加載spring會(huì)加載所有jar包下的META-INF/spring.factories,然后緩存起來(lái),這里就可以通過(guò)類型進(jìn)行獲取;
然后通過(guò)反射,實(shí)例化SpringApplicationRunListener類;注意,前面講過(guò)實(shí)例化的類型,一個(gè)是SpringApplication類型,一個(gè)String數(shù)組類型;
然后就會(huì)在springboot容器的各個(gè)階段通過(guò)封裝的類SpringApplicationRunListeners進(jìn)行處理;
方法詳解
public interface SpringApplicationRunListener { //剛執(zhí)行run方法時(shí) void started(); //環(huán)境建立好時(shí)候 void environmentPrepared(ConfigurableEnvironment environment); //上下文建立好的時(shí)候 void contextPrepared(ConfigurableApplicationContext context); //上下文載入配置時(shí)候 void contextLoaded(ConfigurableApplicationContext context); //上下文刷新完成后,run方法執(zhí)行完之前 void finished(ConfigurableApplicationContext context, Throwable exception); }
具體使用
新建類實(shí)現(xiàn)SpringApplicationRunListener,需要構(gòu)造方法,里面兩個(gè)參數(shù)SpringApplication sa, String[] args;
在resources下新建META-INF\spring.factories文件,文件里面將新建的實(shí)現(xiàn)類的類路徑配置進(jìn)去:
org.springframework.boot.SpringApplicationRunListener=com.study.springbootplus.config.MyApplicationRunListener
public class MyApplicationRunListener implements SpringApplicationRunListener { private final SpringApplication application; private final String[] args; public MyApplicationRunListener(SpringApplication sa, String[] args) { this.application = sa; this.args = args; } @Override public void starting() { System.out.println("服務(wù)啟動(dòng)RunnerTest SpringApplicationRunListener的starting方法..."); } @Override public void environmentPrepared(ConfigurableEnvironment environment) { System.out.println("服務(wù)啟動(dòng)RunnerTest SpringApplicationRunListener的environmentPrepared方法..."); } @Override public void contextPrepared(ConfigurableApplicationContext context) { System.out.println("服務(wù)啟動(dòng)RunnerTest SpringApplicationRunListener的contextPrepared方法..."); } @Override public void contextLoaded(ConfigurableApplicationContext context) { System.out.println("服務(wù)啟動(dòng)RunnerTest SpringApplicationRunListener的contextLoaded方法..."); } @Override public void running(ConfigurableApplicationContext context) { System.out.println("服務(wù)啟動(dòng)RunnerTest SpringApplicationRunListener的running方法..."); } @Override public void failed(ConfigurableApplicationContext context, Throwable exception) { System.out.println("服務(wù)啟動(dòng)RunnerTest SpringApplicationRunListener的failed方法..."); } @Override public void started(ConfigurableApplicationContext context) { System.out.println("服務(wù)啟動(dòng)RunnerTest SpringApplicationRunListener的started方法..."); } }
注意事項(xiàng)
- 任何一個(gè)SpringApplicationRunListener實(shí)現(xiàn)類的構(gòu)造方法都需要有兩個(gè)構(gòu)造參數(shù);源碼里面分析了,需要根據(jù)指定類型的構(gòu)造方法初始化類;
- SpringApplicationRunListener的配置在resources下新建META-INF\spring.factories文件,文件里面將新建的實(shí)現(xiàn)類的類路徑配置進(jìn)去,對(duì)應(yīng)的key是org.springframework.boot.SpringApplicationRunListener;
- SpringApplicationRunListener屬于應(yīng)用程序啟動(dòng)層面的監(jiān)聽(tīng)器,在springboot啟動(dòng)時(shí)候,調(diào)用run方法進(jìn)行反射加載初始化。此時(shí)上下文還沒(méi)有加載,如果通過(guò)@Compnant是起不了作用的.
到此這篇關(guān)于Spring中的監(jiān)聽(tīng)器SpringApplicationRunListener詳解的文章就介紹到這了,更多相關(guān)Spring的SpringApplicationRunListener內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Springboot使用@WebListener?作為web監(jiān)聽(tīng)器的過(guò)程解析
- SpringBoot中添加監(jiān)聽(tīng)器及創(chuàng)建線程的代碼示例
- Spring?Boot攔截器和監(jiān)聽(tīng)器實(shí)現(xiàn)對(duì)請(qǐng)求和響應(yīng)處理實(shí)戰(zhàn)
- SpringBoot 過(guò)濾器, 攔截器, 監(jiān)聽(tīng)器的具體使用
- Spring事件監(jiān)聽(tīng)器ApplicationListener源碼詳解
- SpringBoot使用過(guò)濾器、攔截器和監(jiān)聽(tīng)器的案例代碼(Springboot搭建java項(xiàng)目)
- SpringBoot深入分析講解監(jiān)聽(tīng)器模式下
相關(guān)文章
Java中StringBuilder字符串類型的操作方法及API整理
Java中的StringBuffer類繼承于AbstractStringBuilder,用來(lái)創(chuàng)建非線程安全的字符串類型對(duì)象,下面即是對(duì)Java中StringBuilder字符串類型的操作方法及API整理2016-05-05HttpClient 在Java項(xiàng)目中的使用詳解
HttpClient作為訪問(wèn)Http服務(wù)的客戶端訪問(wèn)程序已經(jīng)被廣泛使用,提高了開發(fā)效率,也提高了代碼的健壯性。因此熟練掌握HttpClient是必需的,關(guān)于httpclient感興趣的朋友可以參考本篇文章2015-10-10使用SpringBoot根據(jù)配置注入接口的不同實(shí)現(xiàn)類(代碼演示)
使用springboot開發(fā)時(shí)經(jīng)常用到@Autowired和@Resource進(jìn)行依賴注入,但是當(dāng)我們一個(gè)接口對(duì)應(yīng)多個(gè)不同的實(shí)現(xiàn)類的時(shí)候如果不進(jìn)行一下配置項(xiàng)目啟動(dòng)時(shí)就會(huì)報(bào)錯(cuò),那么怎么根據(jù)不同的需求注入不同的類型呢,感興趣的朋友一起看看吧2022-06-06Java UUID 五個(gè)版本的區(qū)別及使用場(chǎng)景小結(jié)
在Java中,UUID是一個(gè)128位的唯一標(biāo)識(shí)符,廣泛應(yīng)用于生成唯一標(biāo)識(shí)符、分布式系統(tǒng)唯一鍵等場(chǎng)景,Java提供的java.util.UUID類支持五種UUID版本,每種具有不同的生成方式和使用場(chǎng)景,本文就來(lái)介紹一下如何使用,感興趣的可以了解一下2024-11-11java實(shí)現(xiàn)二叉樹的創(chuàng)建及5種遍歷方法(總結(jié))
下面小編就為大家?guī)?lái)一篇java實(shí)現(xiàn)二叉樹的創(chuàng)建及5種遍歷方法(總結(jié))。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-04-04java實(shí)現(xiàn)收藏名言語(yǔ)句臺(tái)詞的app
本文給大家分享的是使用java制作的記錄名人名言臺(tái)詞等等讓你難忘的語(yǔ)句的APP的代碼,非常的實(shí)用,有需要的小伙伴可以參考下。2015-04-04