LD is tigger forever,CG are not brothers forever, throw the pot and shine forever.
Modesty is not false, solid is not naive, treacherous but not deceitful, stay with good people, and stay away from poor people.
talk is cheap, show others the code,Keep progress,make a better result.
Survive during the day and develop at night。
目录
概 述
我们最常用的就是application.yml配置文件,里面有各种配置信息,然后我们可以将他们和我们的配置属性类绑定,然后使用,有关配置文件属性绑定到配置属性类的原理,可以看这篇文章。本篇想讲下配置文件是什么时候加载进来的原理。
第一步、
ConfigFileApplicationListener
他属于自动配置里的一个监听器,初始化的时候会进行加载,自动配置原理就不多说了。
何时加载配置文件
其实是在环境准备好的时候,会有一个ApplicationEnvironmentPreparedEvent事件通知,而ConfigFileApplicationListener就是接受这个通知的,这个里面就是有加载配置文件相关的处理:
称之为listerener.envirmonent (enronment);
ConfigFileApplicationListener的onApplicationEnvironmentPreparedEvent
遍历
其实内部就这么一个方法,他获取了所有的环境相关的处理器EnvironmentPostProcessor,然后将自己添加进去,最后排序再逐个遍历执行postProcessEnvironment方法。
private void onApplicationEnvironmentPreparedEvent(ApplicationEnvironmentPreparedEvent event) {
List<EnvironmentPostProcessor> postProcessors = loadPostProcessors();
postProcessors.add(this);
AnnotationAwareOrderComparator.sort(postProcessors);
for (EnvironmentPostProcessor postProcessor : postProcessors) {
postProcessor.postProcessEnvironment(event.getEnvironment(), event.getSpringApplication());
}
}
loadPostProcessors
就是用SpringFactoriesLoader去加载EnvironmentPostProcessor类型的处理器,做个不需要多说了吧,做个时候已经有缓存了,直接获取反射创建实例就可以了。
List<EnvironmentPostProcessor> loadPostProcessors() {
return SpringFactoriesLoader.loadFactories(EnvironmentPostProcessor.class, getClass().getClassLoader());
}
ConfigFileApplicationListener的Loader
总结:
相关工具如下:
分析:
小结:
yml配置文件、加载顺序、配置原理~
参考资料和推荐阅读
1.链接: (https://blog.csdn.net/qq_41813208/article/details/109139783).