作者:mobiledu2502890433 | 来源:互联网 | 2024-12-06 18:33
Spring Boot 的启动流程是一个复杂但有序的过程,涉及到多个阶段和组件的协同工作。以下是 Spring Boot 启动过程中的一些核心步骤:
1. 构造方法初始化
当创建一个新的 SpringApplication
实例时,首先会执行其构造方法。在这个方法中,主要完成了以下几项工作:
- 初始化资源加载器,默认情况下为
null
。 - 确保传入的主要源类(
primarySources
)不为 null
,否则抛出异常。 - 初始化主要源类集合,同时去除重复项。
- 判断当前应用程序的类型(
NONE
、SERVLET
或 REACTIVE
)。 - 加载所有的初始化器,这些初始化器是从
META-INF/spring.factories
文件中读取的 ApplicationContextInitializer
类的实例名称集合。 - 设置监听器,同样从
META-INF/spring.factories
文件中读取 ApplicationListener
类的实例名称集合。 - 推断主入口应用类,通过当前调用栈获取
Main
方法所在的类。
2. 启动流程
启动流程的核心方法是 run
方法,该方法负责整个应用的启动过程,主要包括以下几个步骤:
- 创建并启动计时监控类
StopWatch
,用于记录应用启动时间。 - 初始化上下文和异常报告集合。
- 设置系统属性
java.awt.headless
为 true
,以便在无显示设备的环境下运行。 - 注册监听器,创建所有运行监听器并发布应用启动事件。
- 加载命令行参数,解析命令行中通过
--key=value
形式输入的属性值。 - 准备 Spring 环境,包括配置环境变量和设置忽略的参数。
- 创建 Banner 打印类,用于在应用启动时打印欢迎信息。
- 根据当前应用类型(
SERVLET
、REACTIVE
或 NONE
)创建相应的应用上下文对象。 - 设置异常报告对象,用于捕获并报告启动过程中可能出现的错误。
- 准备当前上下文对象,包括将启动类注入容器,为后续的自动化配置提供基础。
- 加载资源配置,完成自动装配。
- 刷新应用上下文,执行一系列初始化操作。
- 执行后置操作,如启动所有的监听器对象和运行器。
- 处理启动失败的情况,确保应用能够优雅地退出。
- 启动完成后,发布应用上下文就绪事件,并返回应用上下文对象。
通过上述步骤,Spring Boot 能够高效且灵活地管理应用的启动过程,为开发者提供了强大的支持。