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

相关推荐
无奈何杨15 分钟前
风控决策系统决策流,策略模式,权重、顺序、投票、最坏
后端
AI开源软件37 分钟前
SpringBoot3+Vue3 财务管理系统如何设计:从业务单据到总账的模块划分
spring boot·vue3·领域建模·会计凭证·ruoyi office·业财协同·财务系统设计
Patrick_Wilson1 小时前
Go 为什么需要 defer?从函数怎么收尾说起
后端·go·编程语言
苏三说技术1 小时前
DeepSeek Harness入驻B站,评论区被干成了大型插件集市!
后端
橙序员小站2 小时前
我一句话让 AI 把公众号工作台搭完了:部署实测记录
后端
Patrick_Wilson2 小时前
从文本输出理解 Go 方法与接口
后端·go·编程语言
QCoding3 小时前
企业级Agent Evaluation实战:Agent能跑就能上线?AI Agent到底怎么测?
后端·spring
苍何3 小时前
让 WorkBuddy 操控浏览器,干活有点猛啊1
后端
海的透彻3 小时前
dockerfile如何快速构建容器(java服务)
java·开发语言
IT_陈寒3 小时前
当Java的hashCode遇上Lombok,我的缓存被全清了
前端·人工智能·后端