news 2026/6/24 22:19:15

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/6/24 13:46:20

【行业篇】一个AI系统工程,盘活了家纺业全链路的效率与体验

2025年国内家纺市场规模将突破5000亿元,线上渠道占比升至35%以上,功能性家纺年增速超15%。行业不缺产能与匠心,但同质化严重、生产灵活度不足、库存周转率低、数据割裂等结构性痛点,正倒逼产业寻找新解法。我们看到家纺行业&#…

作者头像 李华
网站建设 2026/6/24 13:48:30

Vue 3中何时用watch,何时用watchEffect?核心区别及性能优化策略是什么?

一、watch 基本概念与用法1.1 核心概念watch 是 Vue 3 中用于监听特定数据源变化并执行副作用的 API。它默认是惰性的,只有当监听的源发生变化时才会触发回调函数。这使得 watch 非常适合处理那些需要在特定状态变化时执行的异步操作或复杂逻辑。1.2 基本用法示例Op…

作者头像 李华
网站建设 2026/6/4 22:31:10

电气领域项目大赏:从电机到并网,算法到控制

永磁同步电机PMSM负载状态估计(龙伯格观测器,各种卡尔曼滤波器)矢量控制,坐标变换,英文复现,含中文报告,可作为结课作业。 仿真原理图结果对比完全一致。 另外含有各种不同电机仿真包含说明文档…

作者头像 李华
网站建设 2026/6/15 18:23:20

计算机毕业设计之springboot体育课选课系统的设计与实现

时代在飞速进步,每个行业都在努力发展现在先进技术,通过这些先进的技术来提高自己的水平和优势,体育课选课系统当然不能排除在外。体育课选课系统是在实际应用和软件工程的开发原理之上,运用java语言,JSP技术以及Sprin…

作者头像 李华
网站建设 2026/6/20 2:56:31

RTSP/ONVIF协议平台EasyGBS打造雪亮工程国标GB28181视频监控体系

一、背景 在平安中国建设的大背景下,“雪亮工程”作为以群众参与为核心、以视频监控联网为重点的群众性治安防控工程,正逐步实现从“全域覆盖”向“智能高效”的转型升级。其核心目标是打破视频资源孤岛,构建县、乡、村三级联动的治安防控体…

作者头像 李华