交流
商城
MCN
登入
注册
首页
提问
分享
讨论
建议
公告
动态
发表新帖
发表新帖
第3-1 章: EnvironmentPostProcessorApplicationListener
分享
未结
0
1318
李延
LV6
2021-05-20
悬赏:20积分
# 作用 evironment的后置处理器,继承于ApplicationListener,所以它是springboot启动时的一个监听器 # 继承  父类为SmartApplicationListener。我们通过上一章分析,这个接口通过supportsEventType和supportsSourceType方法判断监听哪些事件。 我们看一下具体代码: ```java @Override public boolean supportsEventType(Class<? extends ApplicationEvent> eventType) { return ApplicationEnvironmentPreparedEvent.class.isAssignableFrom(eventType) || ApplicationPreparedEvent.class.isAssignableFrom(eventType) || ApplicationFailedEvent.class.isAssignableFrom(eventType); } ``` 所以很明显,上面的这3个事件会被监听。 # 初始化 ```java public EnvironmentPostProcessorApplicationListener() { this(EnvironmentPostProcessorsFactory .fromSpringFactories(EnvironmentPostProcessorApplicationListener.class.getClassLoader())); } static EnvironmentPostProcessorsFactory fromSpringFactories(ClassLoader classLoader) { return new ReflectionEnvironmentPostProcessorsFactory( SpringFactoriesLoader.loadFactoryNames(EnvironmentPostProcessor.class, classLoader)); } ``` 这里我们看到了熟悉的代码。发现所有的EnvironmentPostProcessor对象都是从META-INF/spring.factories文件中加载的。 # onApplicationEvent 我们都知道 监听器都是通过这个方法来接收事件的,所以我们看一下这个方法 ```java @Override public void onApplicationEvent(ApplicationEvent event) { if (event instanceof ApplicationEnvironmentPreparedEvent) { onApplicationEnvironmentPreparedEvent((ApplicationEnvironmentPreparedEvent) event); } if (event instanceof ApplicationPreparedEvent) { onApplicationPreparedEvent((ApplicationPreparedEvent) event); } if (event instanceof ApplicationFailedEvent) { onApplicationFailedEvent((ApplicationFailedEvent) event); } } private void onApplicationEnvironmentPreparedEvent(ApplicationEnvironmentPreparedEvent event) { ConfigurableEnvironment environment = event.getEnvironment(); SpringApplication application = event.getSpringApplication(); for (EnvironmentPostProcessor postProcessor : getEnvironmentPostProcessors(event.getBootstrapContext())) { postProcessor.postProcessEnvironment(environment, application); } } ``` 其实很明白,就是在环境准备完成后的ApplicationEnvironmentPreparedEvent事件中,依次调用所有的EnvironmentPostProcessor对象。 我们之后代码主要说明关于文件解析的ConfigDataEnvironmentPostProcessor。
回帖
消灭零回复
提交回复
热议榜
java 相关知识分享
8
好的程序员与不好的程序员
6
写给工程师的十条精进原则
5
spring boot以jar包运行配置的logback日志文件没生成
5
一步一步分析SpringBoot启动源码(一)
5
MockMvc测试
5
【吐槽向】是不是有个吐槽的板块比较好玩
4
logstash jdbc同步mysql多表数据到elasticsearch
3
IntelliJ IDEA 优质License Server
3
.gitignore忽略规则
3
SpringBoot启动源码分析
3
一步一步分析SpringBoot启动源码(三)
3
2
一步一步分析SpringBoot启动源码(二)
2
积分不够将无法发表新帖
2
官方产品
Meta-Boot - 基于MCN
MCN - 快速构建SpringBoot应用
微信扫码关注公众号