博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringBoot源码学习(二)
阅读量:4210 次
发布时间:2019-05-26

本文共 1626 字,大约阅读时间需要 5 分钟。

通过上篇文章的学习,大概清楚了springApplication类的功能。但是遗留了几个问题是读取application.properties和loader.load()的功能。因为这两个对于后边的分析会很重要。所以还是要深入的理解。

在学习的时候,发现在148行有对配置的处理。所以读取配置文件,并整合到spring中应该也就是在这里处理的。

我们进入这个方法。

private ConfigurableEnvironment prepareEnvironment(SpringApplicationRunListeners listeners, ApplicationArguments applicationArguments) {        ConfigurableEnvironment environment = this.getOrCreateEnvironment();        this.configureEnvironment((ConfigurableEnvironment)environment, applicationArguments.getSourceArgs());        //配置信息准备好的广播消息        listeners.environmentPrepared((ConfigurableEnvironment)environment);        //将配置绑定到springApplication上        this.bindToSpringApplication((ConfigurableEnvironment)environment);        if (!this.isCustomEnvironment) {            environment = (new EnvironmentConverter(this.getClassLoader())).convertEnvironmentIfNecessary((ConfigurableEnvironment)environment, this.deduceEnvironmentClass());        }        ConfigurationPropertySources.attach((Environment)environment);        return (ConfigurableEnvironment)environment;    }

显然这块最重要的方法就是environmentPrepared

那么我看一下里边具体的实现,这里有一个默认实现(第二个是咋自定义的),那么那么这个默认实现做了哪些事?

发现这里有个ConfigFileApplicationListener。这个看来就和配置读取有关系了。那么咋看看这个类做了哪些工作。

发现了大量的证据,这个configFileApplicationListener就是读取配置文件了。那么他是怎么做的?

通过debug,发现代理进入了这个listener中的onApplicationEvent方法。

这里通过读取spring.factories文件加载出来三个处理器。这三个处理器都和配置处理有关系。

而在每一个配置处理器中都postProcessEnvironment方法,比如在

ConfigFileApplicationListener就是通过loader.load方法读取配置的。

其中读取的配置的目录为

这些方法执行完毕,发现springBoot读取到了6个配置文件。其中application排最后。通过查阅相关的网络博客,提示说这6个配置文件是会依次被覆盖,就是如果前边的配置已经存在了那么后边的同名配置就不起作用了。就是说我们的application.properties是最被动的一个。

转载地址:http://hqkmi.baihongyu.com/

你可能感兴趣的文章
0115 springboot template方式操作mongodb
查看>>
0116 spring的webFlux
查看>>
解决 Asp.net 中,url传参乱码 方法之一:(UrlDecode)
查看>>
pdf的转换网址:
查看>>
c++设计模式之三~抽象工厂模式
查看>>
c++设计模式之单例模式
查看>>
c++设计模式之建造者模式
查看>>
c++设计模式之原型模式
查看>>
c++设计模式之适配器模式
查看>>
c++设计模式之桥接模式
查看>>
c++设计模式之装饰模式
查看>>
Mysql学习笔记(八)- 两个简单实用的优化方法
查看>>
mysql学习笔记(九)- 增删改查的优化
查看>>
Jenkins学习笔记(一)
查看>>
AtomicInteger源码解析
查看>>
CopyOnWriteArraySet源码学习
查看>>
ThreadLocal学习笔记
查看>>
用talib实现基于emv的简易量化投资策略
查看>>
LongAdder源码解析
查看>>
Talib学习笔记(二)- 价格指数学习
查看>>