Spring中的監(jiān)聽器SpringApplicationRunListener詳解
SpringApplicationRunListenerde作用
命名我們就可以知道它是一個監(jiān)聽者,分析springboot啟動流程我們會發(fā)現,它其實是用來在整個啟動流程中接收不同執(zhí)行點事件通知的監(jiān)聽者
SpringApplicationRunListener接口規(guī)定了SpringBoot的生命周期,在各個生命周期廣播相應的事件,調用實際的ApplicationListener類。
源碼分析


前面分析過,前面講過啟動的時候會先加載spring會加載所有jar包下的META-INF/spring.factories,然后緩存起來,這里就可以通過類型進行獲取;
然后通過反射,實例化SpringApplicationRunListener類;注意,前面講過實例化的類型,一個是SpringApplication類型,一個String數組類型;

然后就會在springboot容器的各個階段通過封裝的類SpringApplicationRunListeners進行處理;
方法詳解
public interface SpringApplicationRunListener {
//剛執(zhí)行run方法時
void started();
//環(huán)境建立好時候
void environmentPrepared(ConfigurableEnvironment environment);
//上下文建立好的時候
void contextPrepared(ConfigurableApplicationContext context);
//上下文載入配置時候
void contextLoaded(ConfigurableApplicationContext context);
//上下文刷新完成后,run方法執(zhí)行完之前
void finished(ConfigurableApplicationContext context, Throwable exception);
}
具體使用
新建類實現SpringApplicationRunListener,需要構造方法,里面兩個參數SpringApplication sa, String[] args;
在resources下新建META-INF\spring.factories文件,文件里面將新建的實現類的類路徑配置進去:
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("服務啟動RunnerTest SpringApplicationRunListener的starting方法...");
}
@Override
public void environmentPrepared(ConfigurableEnvironment environment) {
System.out.println("服務啟動RunnerTest SpringApplicationRunListener的environmentPrepared方法...");
}
@Override
public void contextPrepared(ConfigurableApplicationContext context) {
System.out.println("服務啟動RunnerTest SpringApplicationRunListener的contextPrepared方法...");
}
@Override
public void contextLoaded(ConfigurableApplicationContext context) {
System.out.println("服務啟動RunnerTest SpringApplicationRunListener的contextLoaded方法...");
}
@Override
public void running(ConfigurableApplicationContext context) {
System.out.println("服務啟動RunnerTest SpringApplicationRunListener的running方法...");
}
@Override
public void failed(ConfigurableApplicationContext context, Throwable exception) {
System.out.println("服務啟動RunnerTest SpringApplicationRunListener的failed方法...");
}
@Override
public void started(ConfigurableApplicationContext context) {
System.out.println("服務啟動RunnerTest SpringApplicationRunListener的started方法...");
}
}
注意事項
- 任何一個SpringApplicationRunListener實現類的構造方法都需要有兩個構造參數;源碼里面分析了,需要根據指定類型的構造方法初始化類;
- SpringApplicationRunListener的配置在resources下新建META-INF\spring.factories文件,文件里面將新建的實現類的類路徑配置進去,對應的key是org.springframework.boot.SpringApplicationRunListener;
- SpringApplicationRunListener屬于應用程序啟動層面的監(jiān)聽器,在springboot啟動時候,調用run方法進行反射加載初始化。此時上下文還沒有加載,如果通過@Compnant是起不了作用的.
到此這篇關于Spring中的監(jiān)聽器SpringApplicationRunListener詳解的文章就介紹到這了,更多相關Spring的SpringApplicationRunListener內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Java中StringBuilder字符串類型的操作方法及API整理
Java中的StringBuffer類繼承于AbstractStringBuilder,用來創(chuàng)建非線程安全的字符串類型對象,下面即是對Java中StringBuilder字符串類型的操作方法及API整理2016-05-05
使用SpringBoot根據配置注入接口的不同實現類(代碼演示)
使用springboot開發(fā)時經常用到@Autowired和@Resource進行依賴注入,但是當我們一個接口對應多個不同的實現類的時候如果不進行一下配置項目啟動時就會報錯,那么怎么根據不同的需求注入不同的類型呢,感興趣的朋友一起看看吧2022-06-06
java實現二叉樹的創(chuàng)建及5種遍歷方法(總結)
下面小編就為大家?guī)硪黄猨ava實現二叉樹的創(chuàng)建及5種遍歷方法(總結)。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-04-04

