跳到正文
Elaine Blog
返回

手写 Spring Boot 核心流程

Spring 生态与源码

Spring Boot 的核心不是生成业务代码,而是选择 ApplicationContext、准备 Environment、加载主配置与自动配置、刷新容器,并启动内嵌服务器。

Table of contents

Open Table of contents

运行最小启动器

MiniBootSample下载只做三件事:接收主配置类、创建注解 Context、刷新并读取 Bean。

mvn -Dtest=SpringSourceLabTest#minimalBootCreatesAndClosesAContext test

它省略了 Web 类型推断、外部配置、监听器、初始化器、失败分析和服务器,但保留了“主配置源 → Context → refresh”的最小骨架。

给最小启动器逐层加能力

  1. 读取命令行与属性文件,构造 Environment;
  2. 根据类路径选择普通、Servlet 或 Reactive Context;
  3. 注册主配置类和自动配置导入;
  4. 添加 ApplicationContextInitializer 与事件监听器;
  5. 调用 refresh;
  6. 从 WebServerFactory 创建并启动服务器;
  7. 注册 JVM 关闭钩子。

每增加一步先写失败测试,例如端口占用、配置缺失、Bean 创建失败和优雅关闭超时。

自动配置是有条件的后备配置

自动配置通常在某个类存在、某属性匹配且用户没有提供同类 Bean 时注册默认实现。用户定义优先不是“魔法覆盖”,而是 @ConditionalOnMissingBean 等条件的结果。

Starter 负责把一组依赖带入类路径,AutoConfiguration 负责根据环境注册 Bean。混淆两者会让自定义 starter 既难升级又难测试。

嵌入式服务器仍有完整生命周期

Boot 把服务器作为 Context 生命周期的一部分。服务器启动失败应让应用启动失败;关闭时先停止接流量,再等待在途请求和 Bean 销毁。不能把 main 返回当成服务已就绪。

下一步

阅读Spring Boot 启动与自动配置源码,沿 SpringApplication.run 和条件报告验证真实实现。


分享这篇文章:

上一篇
Spring 与 MyBatis 的整合机制
下一篇
Spring Boot 启动与自动配置源码