前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringBoot源码学习(二)

SpringBoot源码学习(二)

作者头像
写一点笔记
发布2020-09-10 15:43:53
4980
发布2020-09-10 15:43:53
举报
文章被收录于专栏:程序员备忘录程序员备忘录

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

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

我们进入这个方法。

代码语言:javascript
复制
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是最被动的一个。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-09-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员备忘录 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档