EnvironmentPostProcessorApplicationListener是专门用来处理EnvironmentPostProcessor实现类的。
public class EnvironmentPostProcessorApplicationListener implements SmartApplicationListener, Ordered {public static final int DEFAULT_ORDER = Ordered.HIGHEST_PRECEDENCE + 10;private final DeferredLogs deferredLogs;private int order = DEFAULT_ORDER;private final Function<ClassLoader, EnvironmentPostProcessorsFactory> postProcessorsFactory;EnvironmentPostProcessorApplicationListener(Function<ClassLoader, EnvironmentPostProcessorsFactory> postProcessorsFactory, DeferredLogs deferredLogs) {this.postProcessorsFactory = postProcessorsFactory;this.deferredLogs = deferredLogs;}// 支持的事件类型@Overridepublic boolean supportsEventType(Class<? extends ApplicationEvent> eventType) {return ApplicationEnvironmentPreparedEvent.class.isAssignableFrom(eventType)|| ApplicationPreparedEvent.class.isAssignableFrom(eventType)|| ApplicationFailedEvent.class.isAssignableFrom(eventType);}// 事件处理@Overridepublic void onApplicationEvent(ApplicationEvent event) {// 环境准备完成事件if (event instanceof ApplicationEnvironmentPreparedEvent) {onApplicationEnvironmentPreparedEvent((ApplicationEnvironmentPreparedEvent) event);}// 应用准备完成事件if (event instanceof ApplicationPreparedEvent) {onApplicationPreparedEvent();}// 应用失败事件if (event instanceof ApplicationFailedEvent) {onApplicationFailedEvent();}}// 处理Enviroment环境上下文准备完成事件private void onApplicationEnvironmentPreparedEvent(ApplicationEnvironmentPreparedEvent event) {ConfigurableEnvironment environment = event.getEnvironment();SpringApplication application = event.getSpringApplication();for (EnvironmentPostProcessor postProcessor : getEnvironmentPostProcessors(application.getResourceLoader(),event.getBootstrapContext())) {// processor#processpostProcessor.postProcessEnvironment(environment, application);}}private void onApplicationPreparedEvent() {finish();}private void onApplicationFailedEvent() {finish();}private void finish() {this.deferredLogs.switchOverAll();}// SPI加载所有的EnvironmentPostProcessorList<EnvironmentPostProcessor> getEnvironmentPostProcessors(ResourceLoader resourceLoader,ConfigurableBootstrapContext bootstrapContext) {ClassLoader classLoader = (resourceLoader != null) ? resourceLoader.getClassLoader() : null;EnvironmentPostProcessorsFactory postProcessorsFactory = this.postProcessorsFactory.apply(classLoader);return postProcessorsFactory.getEnvironmentPostProcessors(this.deferredLogs, bootstrapContext);}}
EnvironmentPostProcessor的实现类
