运行源码分析:初始化ApplicationArguments( 三 )

source = sources.get(name);CompositePropertySource composite = new CompositePropertySource(name);composite . addPropertySource (new SimpleCommandLinePropertySource("springApplicationCommandLineArgs", args));composite . addPropertySource(source);sources . replace(name, composite);t else//放置在第一位sources . addFirst(new SimpleCommandL inePropertySource(args));}}}这段代码需要重点看一下参数的优先级处理和默认参数 与命令参数之间的关系 。 首先 , 如果存在默认属性配置 , 则将默认属性配置放置在最后 , 也就是说优先级最低 。 然后 , 如果命令参数存在则会 出现两种情况:如果命令的参数 已经存在于属性配置中 , 则使用CompositePropertySource 类进行相同 name 的参数处理;如果命令的参数并不存在于属性配置中 , 则直接将其设置为优先级最高 。
ConfigurePropertySources 方法的官方注释也很好地解释了它的功能:增加、移除或重新排序应用环境中的任何 PropertySource 。
完成了 PropertySources 配置 , 随后通过 configureProfiles 方法来完成 Profiles 的配置 , 代码如下 。
protected void configureProfiles (ConfigurableEnvironment environment, String[] args)// 保 证 环 境 的 activeProfiles 属 性 被 初 始 化,如 果 未 初 始 化 该 方 法 会 对 其 初 始 化environment . getActiveProfiles();//如果存在的额外的 Profiles,则将其放置在第- -位 ,随后再获得其他的 ProfilesSetprofiles = new LinkedHashSet<>(this . additionalProfiles);profiles . addAll(Arrays. asList(environment . getActiveProfiles()));environment . setActiveProfiles(StringUtils . toStringArray(profiles));}上面的代码主要用来处理应用环境中哪些配置文件处于激活状态或默认激活状态 。 对应的配置正是我们经常使用的用来区分不同环境的 spring.profiles.active 参数指定的值 。
运行源码分析:初始化ApplicationArguments文章插图
本文给大家讲解的内容是初始化ApplicationArguments、 ConfigurableEnvironment

  1. 下篇文章给大家讲解的是忽略信息配置、打印Banner、Spring应用上下文的创建;
  2. 觉得文章不错的朋友可以转发此文关注小编;
  3. 感谢大家的支持!


推荐阅读