SpringBoot 2.2.2 源码(二):启动流程二

上篇文章源码进行到如下位置

在这里插入图片描述

命令行参数解析

跟进DefaultApplicationArguments,不断追踪,会发现它是用来解析命令行参数的
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
最终parse方法会返回命令行参数commandLineArgs

环境配置

在这里插入图片描述

prepareEnvironment

进入prepareEnvironment方法继续追溯到getOrCreateEnvironment方法

在这里插入图片描述

可以看到这里根据webApplicationType决定采用哪种标准环境,这里采用的是Servlet环境

继续看下Servlet标准环境下的内容

在这里插入图片描述
在这里插入图片描述

在这个类中定义了servlet的两个最重要的属性值:servletContextInitParams 和 servletConfigInitParams

此外还有JNDI的属性值jndiProperties

customizePropertySources方法将上述三个属性值存储到了MutablePropertySources里

attach()

在这里插入图片描述
在这里插入图片描述
在这里完成了configurationProperties的初始化

模版方法configureEnvironment

在这里插入图片描述
在这里插入图片描述

将ConversionService设置到环境里,具体设置在了propertyResolver里

在这里插入图片描述
configurePropertySources主要是对命令行参数的配置

在这里插入图片描述

把activeProfiles环境信息加入到environment中
在这里插入图片描述
在这里插入图片描述

可以看到,这里就是为什么yaml配置文件中配置的上线环境要写active

在这里插入图片描述
attach方法将ConfigurationPropertySources加入environment,这一步不重要

environmentPrepared方法

在这里插入图片描述
跟踪进去后,发现了和starting一模一样的方法,只不过方法名替换为了EnvironmentPrepared

里边流程也一模一样,最终匹配到11个ApplicationListeners中剩下的7个ApplicationListeners(listeners匹配events)

这里只重点关注7个ApplicationListeners的内容

第一个:ConfigFileApplicationListener

遍历7个ApplicationListeners的第一个,持续跟踪会看到下面代码
在这里插入图片描述

依旧从spring.factories文件中以EnvironmentPostProcessor.class为key,反射获取类的实例

这里一个获取到了4个,如下

在这里插入图片描述

在这里插入图片描述
遍历以上四个PostProcessor

第一个:SystemEnvironmentPropertySourceEnvironmentPostProcessor

在这里插入图片描述
可以看到主要作用:对象转换 (ps: 至于为什么要进行对象转换,个人水平不足,没有猜到,如果有哪位大牛知道,还请留言,感谢!)

第二个:SpringApplicationJsonEnvironmentPostProcessor

在这里插入图片描述

主要作用:对Json配置的设置

第三个:CloudFoundryVcapEnvironmentPostProcessor —> 里边啥都没干

第四个:ConfigFileApplicationListener —> 源码如下
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
对yaml/properties配置文件中随机值设置规范,这里明确要求前缀为“random.”

在这里插入图片描述

加载yaml/properties配置资源,这里又看到了LoadFactories方法,因此还是一样,从spring.factories配置文件中获取PropertySourceLoader为key的value值,获取类的实例

在这里插入图片描述

在这里插入图片描述
可以看到,yaml / properties资源已经加载完毕

在这里插入图片描述
该方法执行结束后,我们所写的yaml / properties 配置文件就加载结束了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值