Spring Boot 启动原理深度解析

目录

[一、Spring Boot 启动的入口](#一、Spring Boot 启动的入口)

[二、SpringApplication 是什么?](#二、SpringApplication 是什么?)

[三、SpringApplication.run() 的整体流程](#三、SpringApplication.run() 的整体流程)

四、启动流程详解

[1. 创建 SpringApplication 对象](#1. 创建 SpringApplication 对象)

[2. 准备运行环境(Environment)](#2. 准备运行环境(Environment))

[3. 打印 Banner](#3. 打印 Banner)

[4. 创建 ApplicationContext(容器)](#4. 创建 ApplicationContext(容器))

[5. 刷新容器(refresh)](#5. 刷新容器(refresh))

[6. 自动装配生效](#6. 自动装配生效)

[7. 启动内嵌 Web 服务器](#7. 启动内嵌 Web 服务器)

[8. 发布启动完成事件](#8. 发布启动完成事件)

[五、Spring Boot 启动流程一句话总结](#五、Spring Boot 启动流程一句话总结)


在使用 Spring Boot 开发时,都会写下这样一行代码:

java 复制代码
SpringApplication.run(Application.class, args);

应用就"神奇地"启动了:

容器创建、自动配置生效、内嵌 Tomcat 启动、接口可访问。

那么问题来了:Spring Boot 启动过程中,到底发生了什么?

一、Spring Boot 启动的入口

Spring Boot 的启动入口非常明确:

java 复制代码
public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
}

这行代码,实际上完成了 整个应用生命周期的初始化

二、SpringApplication 是什么?

SpringApplication 是 Spring Boot 启动过程的核心类

它负责:

  • 推断应用类型
  • 创建并刷新 Spring 容器
  • 触发自动装配
  • 启动 Web 服务器

所有启动流程,最终都由它统一调度。

三、SpringApplication.run() 的整体流程

可以将启动流程抽象为 8 个关键步骤

创建应用 → 准备环境 → 创建容器 → 加载配置 → 刷新容器 → 启动服务器 → 完成启动

四、启动流程详解

1. 创建 SpringApplication 对象

java 复制代码
new SpringApplication(primarySources)

在这个阶段,Spring Boot 会:

  • 判断应用类型(Servlet / Reactive / None)
  • 加载 ApplicationContextInitializer
  • 加载 ApplicationListener

这一步为后续启动做准备。

2. 准备运行环境(Environment)

Spring Boot 会创建并准备 Environment:

加载配置文件(application.yml)

加载系统属性、环境变量

处理 spring.profiles.active

配置优先级就在这一步确定。

如果你看到控制台里的 Spring Boot Banner,说明应用已经进入正式启动流程。

4. 创建 ApplicationContext(容器)

根据应用类型创建容器:

Web 项目 → ServletWebServerApplicationContext

非 Web → AnnotationConfigApplicationContext

Spring 容器就是在这一步创建的。

5. 刷新容器(refresh)

这是整个启动过程中最核心的一步

本质上就是 Spring 的:

java 复制代码
ApplicationContext.refresh()

在这一步中完成:

  • BeanDefinition 解析
  • BeanFactory 初始化
  • Bean 实例化与依赖注入
  • AOP、事务等基础设施加载
  • 自动装配生效

Spring Boot 的"魔法",大多发生在这里。

6. 自动装配生效

在容器刷新过程中:

  • @EnableAutoConfiguration
  • 加载自动配置类
  • 条件注解判断
  • 注册 Bean

自动装配是 启动流程的一部分,而不是单独一步。

7. 启动内嵌 Web 服务器

如果是 Web 项目:

  • 创建 Tomcat / Jetty
  • 注册 DispatcherServlet
  • 绑定端口
  • 启动监听

这是 Spring Boot 能直接 java -jar 启动的关键。

8. 发布启动完成事件

  • 发布 ApplicationReadyEvent
  • 执行 CommandLineRunner
  • 执行 ApplicationRunner

此时:应用已完全启动,可以对外提供服务。

五、Spring Boot 启动流程一句话总结

Spring Boot 通过 SpringApplication.run() 创建并刷新 Spring 容器,加载自动配置并启动内嵌服务器,最终完成应用启动。

相关推荐
UrbanJazzerati1 分钟前
Python编程基础:类(class)和构造函数
后端·面试
脸大是真的好~3 分钟前
EasyExcel的使用
java·excel
小宋10215 分钟前
Java 项目结构 vs Python 项目结构:如何快速搭一个可跑项目
java·开发语言·python
楚兴18 分钟前
MacBook M1 安装 OpenClaw 完整指南
人工智能·后端
JavaGuide26 分钟前
一款悄然崛起的国产规则引擎,让业务编排效率提升 10 倍!
java·spring boot
吃虫子的人32 分钟前
记录使用Arthas修改线上源码重新加载的一次过程
java·arthas
Java编程爱好者41 分钟前
2026版Java面试八股文总结(春招+秋招+社招),建议收藏。
后端
朱昆鹏1 小时前
开源 Claude Code + Codex + 面板 的未来vibecoding平台
前端·后端·github
REDcker1 小时前
gRPC开发者快速入门
服务器·c++·后端·grpc