news 2026/4/15 19:55:14

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/3/26 12:21:32

Spring事件模式才是微服务单服务内解耦神器(原理+实战全攻略)

一、核心原理:基于观察者模式的轻量实现 Spring事件模式本质是对观察者模式(发布-订阅模式)的封装与增强,核心目标是实现组件间松耦合通信——让事件发布者与监听者互不直接依赖,通过中间事件载体完成交互。其运行依赖…

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

计算机毕业设计springboot高校通知系统的设计与实现 高校校园消息推送系统的设计与实现 基于微信小程序的高校通知服务平台构建

计算机毕业设计springboot高校通知系统的设计与实现(配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。 随着高等教育规模扩张与信息技术深度渗透,大学校园内信息流通的频…

作者头像 李华
网站建设 2026/4/14 3:38:56

2026年EOR名义雇主服务TOP5推荐,助力企业国际布局新机遇

在企业国际化的过程中,选择合适的EOR名义雇主服务提供商至关重要。这类服务能够帮助企业轻松合规雇佣海外员工,降低用工风险,简化人力资源管理。许多EOR名义雇主服务平台为企业提供一站式解决方案,包括薪酬处理、税务合规及员工福…

作者头像 李华
网站建设 2026/4/13 15:39:14

0x3f 第46天 复习 9:58-10:55

岛屿数量思考组合总和思考组合总和Ⅲ思考N皇后思考单词搜索ac思考搜索旋转楼梯ac思考有效的括号xac搜索二维矩阵ac思考LRU缓存的一半xxacO(1)取最小元素的栈acacac字符串解码acacac每日温度acac柱状图最大矩形面积acac

作者头像 李华
网站建设 2026/3/13 15:05:08

深入揭秘 Linux 虚拟文件系统 VFS(上)

1. 前言 在学习**虚拟文件系统(VFS)**之前,我们应该先了解一下它的出现是为了解决什么问题。 不论是在以前还是现在,Linux 都支持着好几十种文件系统类型,我们在 Shell 里输入 ls -l 看到的都是一行描述文件信息的字…

作者头像 李华