然后通过 SpringApplicationRunListeners的构造器,把这个EventPublishingRunListener 赋值给了全局变量 listeners。
SpringApplicationRunListeners(Log log, Collection<? extends SpringApplicationRunListener> listeners, ApplicationStartup applicationStartup) {
this.log = log;
this.listeners = new ArrayList(listeners);
this.applicationStartup = applicationStartup;
}
listeners.starting(bootstrapContext, this.mainApplicationClass);
发布事件
根据事件找到匹配的监听器,执行。异步执行就丢到线程池中执行。同步的话就直接调用。
2:在SpringApplication.run方法中下一步:准备环境
ConfigurableEnvironment environment = this.prepareEnvironment(listeners, bootstrapContext, applicationArguments);
这里面又发布了一个环境准备的事件。