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

相关推荐
腻害兔3 小时前
【若依项目-产品经理视角】深度拆解 RuoYi-Vue-Pro 商城模块:从商品管理到交易引擎,50 张表撑起一整套电商系统
java·大数据·vue.js·产品经理·ai编程
GetcharZp4 小时前
抛弃低效SSH!这套Ansible+Web可视化神器,让你天天准点下班!
后端
码智社4 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
萧瑟余晖5 小时前
JDK 26 新特性详解
java·开发语言
马优晨6 小时前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
weixin_446260857 小时前
HACO:面向动态部署环境的对冲式智能计算可靠多智能体调度框架
后端·python·flask
ttwuai8 小时前
Cursor 生成 CRUD 后,Go 后台接口别只测 200:JWT、RBAC 和 tenant_id 怎么验
开发语言·后端·golang
用户8356290780518 小时前
Python 实现 Excel 页面布局与打印设置自动化
后端·python
维天说8 小时前
CLI-Switch 2026年3月版历史设计:Hook、TTY 隔离与 JSON 状态
java·服务器·json