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 实现了从启动到服务就绪的完整生命周期管理。