获取所有run方法的侦听器的方法为: SpringApplication里面的getRunListeners(String[] args)方法,该方法的定义如下:
private SpringApplicationRunListeners getRunListeners(String[] args) {
// 组装SpringApplicationRunListener实现类所需要的参数类型
Class<?>[] types = new Class<?>[] { SpringApplication.class, String[].class };
// 创建SpringApplicationRunListeners实例,该实例为SpringApplicationRunListener的集合
return new SpringApplicationRunListeners(logger,
getSpringFactoriesInstances(SpringApplicationRunListener.class, types, this, args),
this.applicationStartup);
}
SpringApplicationRunListeners实例化过程分析:
初始化log属性
初始化listeners属性
初始化applicationStartup属性
这里log属性和SpringApplication中的logger属性为同一个实例变量
这里的applicationStartup属性和SpringApplication中的属性为同一个变量
listeners属性通过SpringFactoriesLoader加载