Spring Boot 的核心不是生成业务代码,而是选择 ApplicationContext、准备 Environment、加载主配置与自动配置、刷新容器,并启动内嵌服务器。
Table of contents
Open Table of contents
运行最小启动器
MiniBootSample下载只做三件事:接收主配置类、创建注解 Context、刷新并读取 Bean。
mvn -Dtest=SpringSourceLabTest#minimalBootCreatesAndClosesAContext test
它省略了 Web 类型推断、外部配置、监听器、初始化器、失败分析和服务器,但保留了“主配置源 → Context → refresh”的最小骨架。
给最小启动器逐层加能力
- 读取命令行与属性文件,构造 Environment;
- 根据类路径选择普通、Servlet 或 Reactive Context;
- 注册主配置类和自动配置导入;
- 添加 ApplicationContextInitializer 与事件监听器;
- 调用 refresh;
- 从 WebServerFactory 创建并启动服务器;
- 注册 JVM 关闭钩子。
每增加一步先写失败测试,例如端口占用、配置缺失、Bean 创建失败和优雅关闭超时。
自动配置是有条件的后备配置
自动配置通常在某个类存在、某属性匹配且用户没有提供同类 Bean 时注册默认实现。用户定义优先不是“魔法覆盖”,而是 @ConditionalOnMissingBean 等条件的结果。
Starter 负责把一组依赖带入类路径,AutoConfiguration 负责根据环境注册 Bean。混淆两者会让自定义 starter 既难升级又难测试。
嵌入式服务器仍有完整生命周期
Boot 把服务器作为 Context 生命周期的一部分。服务器启动失败应让应用启动失败;关闭时先停止接流量,再等待在途请求和 Bean 销毁。不能把 main 返回当成服务已就绪。
下一步
阅读Spring Boot 启动与自动配置源码,沿 SpringApplication.run 和条件报告验证真实实现。