SpringBoot复习:(12)SpringApplicationRunListener和 SpringApplicationRunListeners

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中定义了一个成员变量:
SpringBoot复习:(12)SpringApplicationRunListener和 SpringApplicationRunListeners_第1张图片
SpringApplication的静态run方法包含如下代码:
SpringBoot复习:(12)SpringApplicationRunListener和 SpringApplicationRunListeners_第2张图片
其中调用的getRunListeners代码如下:
SpringBoot复习:(12)SpringApplicationRunListener和 SpringApplicationRunListeners_第3张图片
可以看到,它通过getSpringFactoriesInstances方法获取到SpringApplicationRunListener的collection,然后把它传递给SpringApplicationListeners的构造方法,然后将创建的SpriongApplicationRunListeners对象返回。

在SpringApplication的run方法的不同阶段,分别会调用SpringApplicationRunListeners对象的不同方法,比如
SpringBoot复习:(12)SpringApplicationRunListener和 SpringApplicationRunListeners_第4张图片
这里调用了listeners的environmentPrepared方法,而listeners的相关方法里会遍历其所封装的listener,然后调用对应的listener的方法:
SpringBoot复习:(12)SpringApplicationRunListener和 SpringApplicationRunListeners_第5张图片

高版本的SpringBoot的listener的environmentPrepared方法

这是观察者模式的典型应用。

SpringApplicationRunListener有一个唯一的实现类EventPulishingRunListener
SpringBoot复习:(12)SpringApplicationRunListener和 SpringApplicationRunListeners_第6张图片
当事件发生时,它通过SimpleApplicationEventMulticaster类型的成员变量initialMulticaster来发布事件:
SpringBoot复习:(12)SpringApplicationRunListener和 SpringApplicationRunListeners_第7张图片

你可能感兴趣的:(SpringBoot,spring,boot,后端,java)