Spring Boot 启动生命周期详解
Spring Boot 启动生命周期详解

1. 启动阶段划分
Spring Boot 启动过程分为 4个核心阶段,每个阶段涉及不同的核心类和执行逻辑:
阶段 1:预初始化(Pre-initialization)
- 目标:准备启动器和环境配置
- 关键类:
- SpringApplication:启动器核心类,负责协调整个启动流程
- SpringApplicationBuilder:构建启动器的辅助类(可选)
- Environment:存储配置属性(如
application.properties)
- 执行流程:
- 通过
SpringApplication.run()方法启动应用 - 初始化
SpringApplication对象,设置参数(如主类、环境变量) - 加载
Environment的默认配置(如系统属性、JVM参数)
- 通过
阶段 2:初始化(Initialization)
- 目标:创建
ApplicationContext并加载核心配置 - 关键类:
- ApplicationContext:Spring 容器(如
AnnotationConfigServletWebServerApplicationContext) - SpringApplicationRunListener:监听启动事件(如
ServletWebServerApplicationContext) - ApplicationContextInitializer:初始化容器(如
ConfigFileApplicationListener)
- ApplicationContext:Spring 容器(如
- 执行流程:
- 创建
ApplicationContext实例(Web项目通常为WebApplicationContext) - 通过
ApplicationContextInitializer初始化容器(如加载@PropertySource) - 调用
SpringApplicationRunListener的starting()方法通知启动
- 创建
阶段 3:刷新(Refresh)
- 目标:加载 Bean 定义并完成容器初始化
- 关键类:
- ConfigurableApplicationContext:支持刷新的容器接口
- BeanFactory:Bean 定义的注册表
- BeanDefinitionReader:读取 Bean 配置(如 XML 或注解)
- BeanFactoryPostProcessor:修改 Bean 定义(如
PropertySourcesBeanFactoryPostProcessor) - BeanPostProcessor:修改 Bean 实例(如
AutowiredAnnotationBeanPostProcessor)
- 执行流程:
- 加载 Bean 定义:通过组件扫描(
@ComponentScan)或 XML 配置 - BeanFactory 后处理:
BeanFactoryPostProcessor修改 Bean 定义(如属性源) - 实例化 Bean:创建 Bean 实例(但不注入依赖)
- Bean 后处理:
BeanPostProcessor处理 Bean 实例(如依赖注入) - 注册 Bean:将 Bean 注册到容器中
- 加载 Bean 定义:通过组件扫描(
阶段 4:运行(Run)
- 目标:启动嵌入式服务器并完成应用就绪
- 关键类:
- EmbeddedWebApplicationContext:嵌入式 Web 容器(如 Tomcat、Jetty)
- ApplicationRunner:自定义启动后逻辑(
@Order可控制顺序) - CommandLineRunner:命令行参数处理(与
ApplicationRunner类似)
- 执行流程:
- 启动嵌入式 Web 服务器(如 Tomcat)
- 执行
ApplicationRunner和CommandLineRunner(按顺序) - 输出启动完成日志(如
Started Application in ... seconds)
表格总结:Spring Boot 启动阶段与核心类
| 阶段 | 关键类 | 作用 |
|---|---|---|
| 预初始化 | SpringApplication, Environment | 初始化启动器,加载基础环境配置 |
| 初始化 | ApplicationContext, SpringApplicationRunListener, ApplicationContextInitializer | 创建容器,初始化配置,监听启动事件 |
| 刷新 | ConfigurableApplicationContext, BeanFactory, BeanFactoryPostProcessor, BeanPostProcessor | 加载 Bean 定义,处理 Bean 定义和实例化,完成依赖注入 |
| 运行 | EmbeddedWebApplicationContext, ApplicationRunner, CommandLineRunner | 启动嵌入式服务器,执行自定义启动后逻辑 |
关键类说明
SpringApplication- 核心启动器,协调整个生命周期,支持多种应用类型(如 Web、CLI)。
ApplicationContext- Spring 容器,管理 Bean 的生命周期和依赖注入。
BeanFactoryPostProcessor- 在 Bean 实例化前修改 Bean 定义(如
PropertySourcesBeanFactoryPostProcessor)。
- 在 Bean 实例化前修改 Bean 定义(如
BeanPostProcessor- 在 Bean 实例化后、依赖注入前修改 Bean 实例(如
AutowiredAnnotationBeanPostProcessor)。
- 在 Bean 实例化后、依赖注入前修改 Bean 实例(如
EmbeddedWebApplicationContext- Web 应用的容器,集成嵌入式服务器(如 Tomcat)。
执行顺序总结
plaintext
SpringApplication.run() →
预初始化 → 初始化 → 刷新 → 运行 → 应用启动完成
通过以上流程,Spring Boot 实现了从启动到服务就绪的完整生命周期管理。
