Spring中的SpringApplicationRunListener詳細(xì)解析
前言
SpringApplicationRunListener是一個監(jiān)聽SpringApplication中run方法的接口。在項目啟動過程的各個階段進(jìn)行事件的發(fā)布。
實現(xiàn)SpringApplicationRunListener接口的類由類路徑下加載(META-INF/spring.factories)進(jìn)行初始化。
想要實現(xiàn)SpringApplicationRunListener接口,需要提供能夠接收SpringApplication和String[] args的構(gòu)造器。
SpringApplication.run(CommonsTestApplication.class, args);
SpringApplicationRunListener 類方法
SpringApplicationRunListener 的方法在項目啟動的各個階段提供事件發(fā)布的接口。因此可以通過實現(xiàn)SpringApplicationRunListener 接口,達(dá)到在啟動的各個過程中進(jìn)行擴(kuò)展
public interface SpringApplicationRunListener {
void starting();//run方法開始執(zhí)行,發(fā)布ApplicationStartingEvent事件
//環(huán)境準(zhǔn)備好時,發(fā)布ApplicationEnvironmentPreparedEvent事件
void environmentPrepared(ConfigurableEnvironment environment);
//容器的上下文準(zhǔn)備初始化完畢,發(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)準(zhǔn)備好
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.查看控制臺輸出
可以看出在各個階段的輸出,可以此類來擴(kuò)展程序。

到此這篇關(guān)于Spring中的SpringApplicationRunListener詳細(xì)解析的文章就介紹到這了,更多相關(guān)SpringApplicationRunListener解析內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Spring中的監(jiān)聽器SpringApplicationRunListener詳解
- SpringBoot 整合 Netty 多端口監(jiān)聽的操作方法
- Spring事件監(jiān)聽機(jī)制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中@RequiredArgsConstructor使用詳解
這篇文章主要介紹了Java中@RequiredArgsConstructor使用的相關(guān)資料,@RequiredArgsConstructor是Lombok庫提供的一個注解,用于自動生成一個包含所有final字段和非空字段的構(gòu)造函數(shù),需要的朋友可以參考下2025-05-05
java連接SQL?Server數(shù)據(jù)庫圖文教程(自用)
在Java應(yīng)用程序中,我們經(jīng)常需要與數(shù)據(jù)庫進(jìn)行交互,下面這篇文章主要給大家介紹了關(guān)于java連接SQL?Server數(shù)據(jù)庫的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-06-06
Java中的System.arraycopy()淺復(fù)制方法詳解
這篇文章主要介紹了Java中的System.arraycopy()淺復(fù)制方法詳解,Java數(shù)組的復(fù)制操作可以分為深度復(fù)制和淺度復(fù)制,簡單來說深度復(fù)制,可以將對象的值和對象的內(nèi)容復(fù)制;淺復(fù)制是指對對象引用的復(fù)制,需要的朋友可以參考下2023-11-11

