EnvironmentPostProcessorApplicationListener是专门用来处理EnvironmentPostProcessor实现类的。

    1. public class EnvironmentPostProcessorApplicationListener implements SmartApplicationListener, Ordered {
    2. public static final int DEFAULT_ORDER = Ordered.HIGHEST_PRECEDENCE + 10;
    3. private final DeferredLogs deferredLogs;
    4. private int order = DEFAULT_ORDER;
    5. private final Function<ClassLoader, EnvironmentPostProcessorsFactory> postProcessorsFactory;
    6. EnvironmentPostProcessorApplicationListener(
    7. Function<ClassLoader, EnvironmentPostProcessorsFactory> postProcessorsFactory, DeferredLogs deferredLogs) {
    8. this.postProcessorsFactory = postProcessorsFactory;
    9. this.deferredLogs = deferredLogs;
    10. }
    11. // 支持的事件类型
    12. @Override
    13. public boolean supportsEventType(Class<? extends ApplicationEvent> eventType) {
    14. return ApplicationEnvironmentPreparedEvent.class.isAssignableFrom(eventType)
    15. || ApplicationPreparedEvent.class.isAssignableFrom(eventType)
    16. || ApplicationFailedEvent.class.isAssignableFrom(eventType);
    17. }
    18. // 事件处理
    19. @Override
    20. public void onApplicationEvent(ApplicationEvent event) {
    21. // 环境准备完成事件
    22. if (event instanceof ApplicationEnvironmentPreparedEvent) {
    23. onApplicationEnvironmentPreparedEvent((ApplicationEnvironmentPreparedEvent) event);
    24. }
    25. // 应用准备完成事件
    26. if (event instanceof ApplicationPreparedEvent) {
    27. onApplicationPreparedEvent();
    28. }
    29. // 应用失败事件
    30. if (event instanceof ApplicationFailedEvent) {
    31. onApplicationFailedEvent();
    32. }
    33. }
    34. // 处理Enviroment环境上下文准备完成事件
    35. private void onApplicationEnvironmentPreparedEvent(ApplicationEnvironmentPreparedEvent event) {
    36. ConfigurableEnvironment environment = event.getEnvironment();
    37. SpringApplication application = event.getSpringApplication();
    38. for (EnvironmentPostProcessor postProcessor : getEnvironmentPostProcessors(application.getResourceLoader(),
    39. event.getBootstrapContext())) {
    40. // processor#process
    41. postProcessor.postProcessEnvironment(environment, application);
    42. }
    43. }
    44. private void onApplicationPreparedEvent() {
    45. finish();
    46. }
    47. private void onApplicationFailedEvent() {
    48. finish();
    49. }
    50. private void finish() {
    51. this.deferredLogs.switchOverAll();
    52. }
    53. // SPI加载所有的EnvironmentPostProcessor
    54. List<EnvironmentPostProcessor> getEnvironmentPostProcessors(ResourceLoader resourceLoader,
    55. ConfigurableBootstrapContext bootstrapContext) {
    56. ClassLoader classLoader = (resourceLoader != null) ? resourceLoader.getClassLoader() : null;
    57. EnvironmentPostProcessorsFactory postProcessorsFactory = this.postProcessorsFactory.apply(classLoader);
    58. return postProcessorsFactory.getEnvironmentPostProcessors(this.deferredLogs, bootstrapContext);
    59. }
    60. }

    EnvironmentPostProcessor的实现类
    image.png