Spring Boot引入了一個新的擴展接口
SpringApplicationRunListener
筒占,可以監(jiān)聽Spring Application啟動過程的各個階段婚被,比如應用開始啟動、環(huán)境ready丽柿、上下文ready等
自定義擴展類
-
TenmaoRunListener
需要注意的就是構造函數(shù),比如接受兩個參數(shù)SpringApplication application, String[] args
虐先。這一點也蠻有意思暮蹂,為什么擴展機制還需要有一些潛規(guī)則呢寞缝?是不是接口上實現(xiàn)這兩個參數(shù)的賦值是不是更好一些?
@Slf4j
public class TenmaoRunListener implements SpringApplicationRunListener {
public TenmaoRunListener(SpringApplication application, String[] args) {
log.info("TenmaoRunListener Constructor: application[{}] args: {}",
application.getMainApplicationClass(), Arrays.toString(args));
}
@Override
public void starting(ConfigurableBootstrapContext bootstrapContext) {
log.info("starting");
}
@Override
public void environmentPrepared(ConfigurableBootstrapContext bootstrapContext, ConfigurableEnvironment environment) {
log.info("environmentPrepared");
}
@Override
public void contextPrepared(ConfigurableApplicationContext context) {
log.info("contextPrepared");
}
@Override
public void contextLoaded(ConfigurableApplicationContext context) {
log.info("contextLoaded");
}
@Override
public void started(ConfigurableApplicationContext context) {
log.info("started");
}
@Override
public void running(ConfigurableApplicationContext context) {
log.info("running");
}
@Override
public void failed(ConfigurableApplicationContext context, Throwable exception) {
log.info("failed");
}
}
啟動方式:resources/META-INF/spring.factories
org.springframework.boot.SpringApplicationRunListener=com.tenmao.initializer.TenmaoRunListener
作用
- 這個擴展機制作用目前來看并不是很大仰泻,主要用來做一些事件發(fā)布或通知荆陆。在Spring Boot內(nèi)部,目前也只有
EventPublishingRunListener
使用了這個擴展接口
疑問
- 為什么Spring沒有使用事件機制集侯,而是使用各種監(jiān)聽器呢被啼? 一種猜測,就是事件機制不方便攜帶太多不同的參數(shù)