在SpringApplication的源码中,关于 ApplicationListener 的代码少的可怜,只有监听事件的设置和获取,那么监听事件是如何执行的呢?
在 SpringApplication 执行 run() 方法前,我们通过 addListeners() 方法增加了一系列监听事件:
SpringApplication application = new SpringApplication(SpringApp6.class);
// 增加全阶段监听
application.addListeners(
new MyApplicationStartingEventListener(),
new MyApplicationEnvironmentPreparedEventListener(),
new MyApplicationContextInitializedEventListener(),
new MyApplicationPreparedEventListener(),
new MyApplicationStartedEventListener(),
new MyApplicationReadyEventListener(),
new MyApplicationFailedEventListener());
application.run(args);
每个SpringApplicationEvent 监听事件都是通过 ApplicationListener 监听。
/**
* 1.开始启动监听
*
*/
public class MyApplicationStartingEventListener implements ApplicationListener<ApplicationStartingEvent> {
@Override
public void onApplicationEvent(ApplicationStartingEvent event) {
System.out.println("1. 应用开始监听----" + event.toString());
}
}
// 其他监听器省略
每个事件源都是SpringApplicationEvent的子类。
SpringApplication 中关于 ApplicationListener 监听器的的代码如下:
// ApplicationListener 监听集合 listeners
private List<ApplicationListener<?>> listeners;
/**
* 添加一个或多个监听事件
* @param listeners the listeners to add
*/
public void addListeners(ApplicationListener<?>... listeners) {
this.listeners.addAll(Arrays.asList(listeners));
}
/**
* 添加全部的监听事件
* @param li