Spring中的SpringApplicationRunListener詳細解析
前言
SpringApplicationRunListener是一個監(jiān)聽SpringApplication中run方法的接口。在項目啟動過程的各個階段進行事件的發(fā)布。
實現(xiàn)SpringApplicationRunListener接口的類由類路徑下加載(META-INF/spring.factories)進行初始化。
想要實現(xiàn)SpringApplicationRunListener接口,需要提供能夠接收SpringApplication和String[] args的構(gòu)造器。
SpringApplication.run(CommonsTestApplication.class, args);
SpringApplicationRunListener 類方法
SpringApplicationRunListener 的方法在項目啟動的各個階段提供事件發(fā)布的接口。因此可以通過實現(xiàn)SpringApplicationRunListener 接口,達到在啟動的各個過程中進行擴展
public interface SpringApplicationRunListener { void starting();//run方法開始執(zhí)行,發(fā)布ApplicationStartingEvent事件 //環(huán)境準備好時,發(fā)布ApplicationEnvironmentPreparedEvent事件 void environmentPrepared(ConfigurableEnvironment environment); //容器的上下文準備初始化完畢,發(fā)布ApplicationContextInitializedEvent void contextPrepared(ConfigurableApplicationContext context); //上下文加載配置時候,對應(yīng)ApplicationPreparedEvent void contextLoaded(ConfigurableApplicationContext context); //上下文刷新且應(yīng)用啟動時,并且在CommandLineRunner和ApplicationRunners還沒喚醒前,發(fā)布程序以及啟動事件ApplicationStartedEvent void started(ConfigurableApplicationContext context); //在上下文刷新,應(yīng)用已經(jīng)啟動,在CommandLineRunner和ApplicationRunners喚醒后,并且在run方法快執(zhí)行結(jié)束前執(zhí)行,發(fā)布ApplicationReadyEvent,代表程序已經(jīng)準備好 void running(ConfigurableApplicationContext context); //當(dāng)運行程序失敗時,發(fā)布ApplicationFailedEvent事件。 void failed(ConfigurableApplicationContext context, Throwable exception); }
實現(xiàn)
1.實現(xiàn)SpringApplicationRunListener接口
注意添加能夠接收SpringApplication 和String[] 的構(gòu)造器
在started方法中添加了自定義的事件發(fā)布。
package com.wzx.listener; import com.wzx.event.TestApplication; import com.wzx.event.TestApplicationEvent; import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplicationRunListener; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.core.env.ConfigurableEnvironment; /** * @Description: TODO * @author: wengzx * @date: 2021年04月14日 16:01 */ public class TestSpringApplicationRunListener implements SpringApplicationRunListener { private final SpringApplication application; private final String[] args; public TestSpringApplicationRunListener(SpringApplication application, String[] args1) { this.application = application; this.args = args1; } @Override public void starting() { System.out.println("TestSpringApplicationRunListener is starting"); } @Override public void environmentPrepared(ConfigurableEnvironment environment) { System.out.println("TestSpringApplicationRunListener is environmentPrepared"); } @Override public void contextPrepared(ConfigurableApplicationContext context) { System.out.println("TestSpringApplicationRunListener is contextPrepared"); } @Override public void contextLoaded(ConfigurableApplicationContext context) { System.out.println("TestSpringApplicationRunListener is contextLoaded"); } @Override public void started(ConfigurableApplicationContext context) { System.out.println("TestSpringApplicationRunListener is started"); TestApplication testApplication = new TestApplication(); testApplication.setName("zhangsan"); testApplication.setAge(23); TestApplicationEvent testApplicationEvent = new TestApplicationEvent(testApplication); context.publishEvent(testApplicationEvent); } @Override public void running(ConfigurableApplicationContext context) { System.out.println("TestSpringApplicationRunListener is running"); } @Override public void failed(ConfigurableApplicationContext context, Throwable exception) { System.out.println("TestSpringApplicationRunListener is failed"); } }
2.配置META-INF/spring.factories
3.在SpringApplication.run(String... args)方法內(nèi)斷點啟動程序,可以發(fā)現(xiàn)獲得了自定義的程序監(jiān)聽器。
4.查看控制臺輸出
可以看出在各個階段的輸出,可以此類來擴展程序。
到此這篇關(guān)于Spring中的SpringApplicationRunListener詳細解析的文章就介紹到這了,更多相關(guān)SpringApplicationRunListener解析內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Spring中的監(jiān)聽器SpringApplicationRunListener詳解
- SpringBoot 整合 Netty 多端口監(jiān)聽的操作方法
- Spring事件監(jiān)聽機制ApplicationEvent方式
- Springboot使用@WebListener?作為web監(jiān)聽器的過程解析
- Spring事件監(jiān)聽源碼解析流程分析
- SpringBoot下使用自定義監(jiān)聽事件的流程分析
- SpringBoot中添加監(jiān)聽器及創(chuàng)建線程的代碼示例
- Spring?Boot攔截器和監(jiān)聽器實現(xiàn)對請求和響應(yīng)處理實戰(zhàn)
相關(guān)文章
簡述Java中進程與線程的關(guān)系_動力節(jié)點Java學(xué)院整理
在 Java 語言中,對進程和線程的封裝,分別提供了 Process 和 Thread 相關(guān)的一些類。本文首先簡單的介紹如何使用這些類來創(chuàng)建進程和線程2017-05-05解決Mybatis的serverTimezone時區(qū)出現(xiàn)問題
這篇文章主要介紹了解決Mybatis的serverTimezone時區(qū)出現(xiàn)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09Jackson使用示例-Bean、XML、Json之間相互轉(zhuǎn)換
Jackson是一個強大工具,可用于Json、XML、實體之間的相互轉(zhuǎn)換,JacksonXmlElementWrapper用于指定List等集合類,外圍標(biāo)簽名,JacksonXmlProperty指定包裝標(biāo)簽名,或者指定標(biāo)簽內(nèi)部屬性名,JacksonXmlRootElement指定生成xml根標(biāo)簽的名字,JacksonXmlText指定當(dāng)前這個值2024-05-05Spring @Scheduler使用cron表達式時的執(zhí)行問題詳解
Spring給程序猿們帶來了許多便利。下面這篇文章主要給大家介紹了關(guān)于Spring @Scheduler使用cron表達式時的執(zhí)行問題的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-09-09