SpringApplicationRunListener接口定义如下:
public interface SpringApplicationRunListener {
default void starting() {
}
default void environmentPrepared(ConfigurableEnvironment environment) {
}
default void contextPrepared(ConfigurableApplicationContext context) {
}
default void contextLoaded(ConfigurableApplicationContext context) {
}
default void started(ConfigurableApplicationContext context) {
}
default void running(ConfigurableApplicationContext context) {
}
default void failed(ConfigurableApplicationContext context, Throwable exception) {
}
}
SpringApplicationRunListeners中定义了一个成员变量:

SpringApplication的静态run方法包含如下代码:

其中调用的getRunListeners代码如下:

可以看到,它通过getSpringFactoriesInstances方法获取到SpringApplicationRunListener的collection,然后把它传递给SpringApplicationListeners的构造方法,然后将创建的SpriongApplicationRunListeners对象返回。
在SpringApplication的run方法的不同阶段,分别会调用SpringApplicationRunListeners对象的不同方法,比如

这里调用了listeners的environmentPrepared方法,而listeners的相关方法里会遍历其所封装的listener,然后调用对应的listener的方法:

或

这是观察者模式的典型应用。
SpringApplicationRunListener有一个唯一的实现类EventPulishingRunListener

当事件发生时,它通过SimpleApplicationEventMulticaster类型的成员变量initialMulticaster来发布事件:




















