Spring Boot 源码研读之ConfigurableEnvironment 环境准备

1、ConfigurableEnvironment 环境创建

跟踪源码可以看出对于web服务最终创建的是 ApplicationServletEnvironment,以下是ApplicationServletEnvironment 类的结构图。

2、配置环境

让我们继续看看在环境对象创建好后,配置环境具体做了哪些事情。

  • 设置转换服务 ApplicationConversionService
  • 添加命令行参数key=commandLineArgs
  • attach(environment )
    • 目的 :将创建 ApplicationServletEnvironment 时,默认构建的MutablePropertySources 包装成 SpringConfigurationPropertySources,同时将 PropertySource 包装成ConfigurationPropertySourcesPropertySource 以支持@ConfigurationProperties 注解类型的属性源的解析。第二就是将增强后的属性源放到属性源列表的最前面,以便让其优先工作。
    • 注意:这里增加解析还得结合 ConfigurationPropertiesBindingPostProcessor 实现去看

3、执行 SpringApplicationRunListener.environmentPrepared

通过 SimpleApplicationEventMulticaster 多播执行实现了 ApplicationListener 接口实现类的 onApplicationEvent 方法。应用事件类型为 ApplicationEnvironmentPreparedEvent。主要用于在环境准备好之后、上下文创建之前处理的一些需要的操作。

4、继续配置环境

  • defaultProperties 配置属性移到最后

  • 将环境绑定到 SpringApplication

  • 按 *WebApplicationType *类型进行环境转换

  • 再次attach,确保让增强的属性源优先工作

注:spring boot 版本为3.2.3

相关推荐
IT_陈寒21 分钟前
React Hooks闭包陷阱差点让我加班到凌晨
前端·人工智能·后端
黑马程序员毕设27 分钟前
基于Java的医院药品管理系统的优化设计与实现
java·开发语言·spring boot·小程序·架构·课程设计·毕设
木井巳31 分钟前
【BFS/DFS 解决 FloodFill 算法】太平洋大西洋水流问题
java·算法·leetcode·深度优先·广度优先·宽度优先·推荐算法
码事漫谈44 分钟前
本体论,彻底懂
后端
白山编程大哥1 小时前
Java 集合算法:从排序、查找到底层原理的实战指南
java·python·算法
创新技术阁1 小时前
FastapiAdmin 系统日志体系与核心配置参数详解
前端·后端·fastapi
掘金者阿豪1 小时前
SQL Server 迁到金仓,真正麻烦的不是数据,而是这些 T-SQL
后端
devpotato1 小时前
缓存与数据库更新顺序不一致问题
java·数据库·redis
xcl09251 小时前
酒馆预约系统开发实战:从需求分析到上线全流程指南
java·spring boot·需求分析
Kyrie_kk2 小时前
Java--IO--Path文件访问
java·后端