Spring Boot 是基于 Spring 框架的快速开发框架,极大简化了项目配置和启动流程。理解其启动流程有助于深入掌握框架原理和调试项目。

一、启动入口

Spring Boot 应用的启动入口通常是主类的 main 方法,调用:

1
SpringApplication.run(Application.class, args);

这行代码触发了整个 Spring Boot 启动过程。

二、SpringApplication 初始化

SpringApplication 是启动的核心类,主要完成:

  • 读取启动参数
  • 准备环境(Environment)
  • 创建 Spring 容器(ApplicationContext)
  • 加载和刷新上下文
  • 执行 CommandLineRunnerApplicationRunner

三、启动流程详解

  1. 创建 SpringApplication 实例
    通过传入主类,Spring Boot 识别启动类的基本信息。

  2. 准备环境
    加载配置文件(application.propertiesapplication.yml),包括配置的 profiles 和环境变量。

  3. 创建 ApplicationContext
    根据项目类型(Web 或非 Web)选择合适的上下文容器,比如 AnnotationConfigServletWebServerApplicationContext

  4. 注册监听器和初始器
    添加事件监听器,处理启动前后的事件通知。初始器可以自定义容器准备工作。

  5. 加载 Bean 定义
    通过 @SpringBootApplication(包含 @SpringBootConfiguration@ComponentScan)扫描并注册 Bean。

  6. 刷新容器
    初始化所有单例 Bean,处理依赖注入。

  7. 启动嵌入式服务器
    如果是 Web 应用,启动内置 Tomcat/Jetty 等服务器。

  8. 执行 Runner
    执行实现了 CommandLineRunnerApplicationRunner 接口的 Bean。

  9. 完成启动
    Spring Boot 完成启动,监听端口,等待请求。

四、启动事件

启动过程会发布多个事件,可以监听:

  • ApplicationStartingEvent
  • ApplicationEnvironmentPreparedEvent
  • ApplicationPreparedEvent
  • ApplicationStartedEvent
  • ApplicationReadyEvent
  • ApplicationFailedEvent

这些事件适合在不同阶段插入自定义逻辑。