news 2026/4/16 23:40:56

SpringBoot启动原理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SpringBoot启动原理

Spring Boot 的启动原理可以用一句话概括:
一个main方法 → 启动 SpringApplication → 创建并刷新 Spring 容器 → 启动内嵌 Web 服务器 → 自动装配所有组件。
@EnableAutoConfiguration会通过AutoConfigurationImportSelectorMETA-INF/spring/...AutoConfiguration.imports收集所有自动配置类,并基于@Conditional*条件(类存在/属性开启/Bean 缺失等)筛选、排序后导入到容器,最终实现“starter 引入依赖即可自动获得默认 Bean 与功能”。

下面按真实底层流程给你拆开讲(偏源码级思路)。


一、入口:main 方法
@SpringBootApplication public class App { public static void main(String[] args) { SpringApplication.run(App.class, args); } }
真正做事的是:
SpringApplication.run()


二、SpringApplication.run 做了什么?
核心四步:
1. 推断应用类型(Web / Reactive / None)
ApplicationType = SERVLET / REACTIVE / NONE
判断有没有:

  • DispatcherServlet→ Spring MVC
  • WebFlux→ 响应式
  • 都没有 → 普通 Java 程序

2. 创建并准备 Spring 容器
创建的是:
ConfigurableApplicationContext
例如:

  • Web 项目:AnnotationConfigServletWebServerApplicationContext

然后做:

  • 加载ApplicationContextInitializer
  • 设置 Environment(读取配置)
    • application.yml
    • application.properties
    • 环境变量
    • JVM 参数
    • Nacos / Apollo 等

3. 刷新容器(核心)
等价于调用:
context.refresh();
这里进入Spring 原生启动流程

  1. 扫描 Bean(@ComponentScan)
  2. 解析配置类(@Configuration)
  3. 处理自动装配(@EnableAutoConfiguration)
  4. 实例化 Bean
  5. 依赖注入
  6. 初始化 Bean(@PostConstruct, InitializingBean)

4. 启动内嵌 Tomcat / Netty / Jetty
Spring Boot 的革命性点:
把 Web 容器变成普通 Bean

自动创建:
TomcatServletWebServerFactory
然后:
webServer.start();
端口监听完成,应用可访问。


三、自动装配原理(Spring Boot 的灵魂)
你没写任何配置,却自动有:

  • DataSource
  • Redis
  • Kafka
  • MVC
  • Jackson
  • MyBatis
  • ClickHouse Driver
  • Tomcat

原因是:
1. @SpringBootApplication 本质
等价于:
@Configuration @ComponentScan @EnableAutoConfiguration
2. @EnableAutoConfiguration 干了什么?
它会加载:
META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports


(老版本是 spring.factories)
里面是成百上千个自动配置类:
DataSourceAutoConfiguration RedisAutoConfiguration KafkaAutoConfiguration TomcatAutoConfiguration ...
每个都带条件注解:
@ConditionalOnClass @ConditionalOnBean @ConditionalOnMissingBean @ConditionalOnProperty
意思是:
类存在我才装
Bean 不存在我才装
配置开启我才装

这就实现了智能装配


四、完整启动时序图(工程级视角)
main() ↓ SpringApplication.run() ↓ 创建 ApplicationContext ↓ 加载 Environment(配置中心 / yml / 变量) ↓ 执行自动装配(EnableAutoConfiguration) ↓ 扫描并实例化 Bean ↓ 创建内嵌 Tomcat ↓ 注册 DispatcherServlet ↓ 启动端口监听 ↓ 应用就绪(ApplicationReadyEvent)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 14:32:07

Java基于Spring Boot+Vue的自行车租凭管理系统

这里写目录标题 项目介绍系统实现截图技术栈介绍Spring Boot与Vue结合使用的优势Spring Boot的优点Vue的优点 Spring Boot 框架结构解析Vue介绍系统执行流程Java语言介绍系统测试目的可行性分析核心代码详细视频演示源码获取 所需该项目可以在最下面查看联系方式,为…

作者头像 李华
网站建设 2026/4/16 0:14:53

商城活动说明

一、活动说明抽奖活动凭借着以小博大的杠杆效应、低门槛参与、高奖励诱惑的活动机制,无论是线下门店促销,还是线上活动,都被广泛用于拉新、促活、获客等增长环节。二、功能说明系统提供的抽奖环节有:积分抽奖,下单支付…

作者头像 李华
网站建设 2026/4/16 9:23:24

25.4 进度类

🌟 一、单代号网络图(PDM / 前导图法)✅ 定义前导图法(Precedence Diagramming Method, PDM):用矩形/方框(节点)表示活动,箭头表示逻辑关系。节点需编号,箭线…

作者头像 李华
网站建设 2026/4/15 23:11:08

收藏!2025秋招真相:IT仍是王者,AI算法岗年薪40万领跑全场

秋招战场的冰火两重天,今年格外刺眼。一边是无数毕业生为“月薪过万”辗转焦虑,投出的简历石沉大海;另一边,不少瞄准热门赛道的毕业生,早已将“年薪40万”纳入囊中之物,成为秋招里的“天选赢家”。 近日&a…

作者头像 李华
网站建设 2026/4/16 7:25:25

Therma Wave 14-004693

产品概述Therma Wave 14-004693 Rev D是用于半导体制造或检测设备的电气总成组件,通常与晶圆处理或真空系统相关。该型号可能涉及温度控制、真空环境维持或信号传输功能,具体应用取决于设备型号。功能特点晶圆处理:可能包含晶圆定位、温度监控…

作者头像 李华
网站建设 2026/4/16 7:30:05

[运营进阶] 店铺图片风格杂乱?浅析如何利用 AI 批量统一视觉规范,打造“大牌感”Listing

品牌出海 视觉营销 跨境电商 AI工具 自动化办公 图片处理前言在跨境电商从“野蛮生长”转向“品牌出海”的今天,Listing 的视觉质量 往往决定了买家对品牌的首因效应。对于拥有独立供应链的大卖来说,他们可以花费巨资统一拍摄、统一修图。但对于大多数中…

作者头像 李华