【Spring源码14】SpringBoot万字拆解:启动全流程源码+约定大于配置核心思想(零基础吃透)
🔥 Spring全家桶源码连载系列(SpringBoot开篇)
前面13篇我们彻底吃透了 Spring Core、AOP、事务、设计模式、SpringMVC 底层源码。
我们已经知道:SSM框架需要繁琐的XML配置、手动整合、繁琐初始化。
而 SpringBoot 的出现,就是为了解决 Spring 框架「配置繁琐、整合复杂、部署笨重」的痛点。
绝大多数开发者只会用 SpringBoot,但是底层一问就崩:
-
SpringBoot 到底解决了什么问题?
-
“约定大于配置”到底是什么?底层如何实现?
-
main方法启动的底层流程是什么?
-
为什么不用部署Tomcat?内嵌容器原理?
-
@SpringBootApplication 一个注解到底整合了多少功能?
-
SpringBoot 是如何自动加载 Bean、自动配置 Web 环境?
本篇作为 SpringBoot源码第一篇开篇,从零拆解 SpringBoot 核心思想与完整启动源码链路,打通 Spring 与 SpringBoot 的底层关联,彻底告别只会用、不懂原理的窘境!
一、SpringBoot核心前置认知
1.1 什么是SpringBoot?
SpringBoot 是 Spring 框架的快速开发脚手架,不是替代 Spring,而是 基于Spring、SpringMVC做的上层封装。
核心定位:简化开发、简化配置、简化整合、简化部署。
所有 SpringBoot 的底层,依然是 SpringIoC + AOP + SpringMVC,没有任何新技术,只是做了自动化封装。
1.2 SSM 与 SpringBoot 核心区别
很多人分不清两者的本质区别,这里一句话讲透:
SSM 需要手动配置一切,SpringBoot 自动帮你配置一切。
|
对比维度 |
传统 SSM |
SpringBoot |
|---|---|---|
|
配置方式 |
大量 XML 手动配置 |
零配置、自动配置 |
|
容器部署 |
外置 Tomcat,打 war 包部署 |
内嵌 Tomcat,直接 jar 启动 |
|
框架整合 |
手动导包、手动兼容版本 |
starter 启动器,版本自动适配 |
|
Bean 注册 |
手动配置、手动扫描 |
自动扫描、自动装配 |
1.3 核心思想:约定大于配置(面试必考)
SpringBoot 最核心、最精髓的设计思想:Convention over Configuration。
通俗解释:
SpringBoot 提前定义好了一套默认规范、默认路径、默认配置、默认规则。
开发者遵守约定就无需配置,只有个性化需求才需要手动改配置。
彻底解决传统开发「重复配置、模板配置、无效配置」的问题。
1.4 SpringBoot 常见默认约定
-
启动类所在包为根扫描包,自动扫描当前包及子包所有组件
-
默认配置文件:application.yml / application.properties
-
默认静态资源存放路径:resources/static / resources/public
-
默认端口:8080
-
默认开启 Web 环境、内嵌 Tomcat
-
默认开启事务、AOP、日志、JSON解析等通用功能
二、核心注解:@SpringBootApplication 底层拆解
SpringBoot 项目只需要一个启动注解,包揽所有功能。
@SpringBootApplication = 三大核心注解合体
2.1 @Configuration
标记当前类为配置类,可以通过 @Bean 注册组件到容器。
2.2 @ComponentScan
自动包扫描:扫描启动类所在包及所有子包,将 Controller、Service、Component 全部自动加载进 IoC 容器。
2.3 @EnableAutoConfiguration(核心灵魂)
开启自动配置功能,这是 SpringBoot 最核心的注解。
作用:SpringBoot 根据项目依赖,自动推断当前项目环境,自动加载对应的自动配置类,无需手动配置。
比如:引入web依赖 → 自动配置SpringMVC、Tomcat、视图解析器、参数解析器等全套web环境。
三、SpringBoot 完整启动源码流程(逐行拆解)
所有 SpringBoot 项目入口:
SpringApplication.run(Application.class, args);
看似一行代码,底层执行了上百个核心操作,我们分层拆解完整启动链路。
第一步:初始化 SpringApplication 对象
构造方法初始化基础环境:
-
推断当前项目环境(Web环境 / 普通Java环境)
-
加载系统内置监听器(事件驱动)
-
加载主启动类配置信息
第二步:执行 run() 核心方法
整个 SpringBoot 启动的总入口,包含十大启动步骤:
1、启动计时器、开启启动监控
记录项目启动耗时,打印启动日志。
2、准备环境变量、加载配置文件
加载 application 配置文件、系统环境变量、JVM参数、命令行参数。
3、创建 SpringIoC 容器(AnnotationConfigApplicationContext)
SpringBoot 默认使用注解版容器,无需XML,纯注解驱动。
4、容器前置预处理
设置容器环境、注册容器后置处理器、初始化基础组件。
5、加载主启动类 BeanDefinition
将启动类作为配置类注册到容器,解析其中的 @Bean 方法。
6、执行容器刷新 refresh()(重中之重)
这里完全复用我们前面学的Spring IoC核心流程!
扫描Bean定义、实例化、属性填充、初始化、AOP代理、存入单例池,全套流程完全一致。
7、自动配置类加载
在容器刷新阶段,SpringBoot 自动加载所有 自动配置类,完成 Web、事务、Jackson、日志、文件上传等所有组件自动装配。
8、初始化内嵌 Tomcat 容器
检测到Web环境,自动创建、启动内嵌Tomcat,绑定端口,监听请求。
9、执行容器后置拓展逻辑
执行自定义监听器、启动回调、初始化完成钩子方法。
10、启动完成、打印启动成功日志
容器完全初始化完毕,项目对外提供服务。
四、SpringBoot Starter 启动器原理
4.1 什么是 Starter?
Starter 是 SpringBoot 的依赖整合包,将某一类功能的所有依赖、版本、配置全部封装好,开发者只需引入一个依赖即可使用全套功能。
4.2 核心优势
-
无需手动管理版本冲突
-
无需引入多个繁琐依赖
-
引入即生效,自动配置
4.3 常见 Starter
-
spring-boot-starter-web:web全套环境(SpringMVC+Tomcat)
-
spring-boot-starter-aop:AOP切面环境
-
spring-boot-starter-transaction:事务环境
-
spring-boot-starter-test:测试环境
五、SpringBoot 核心优势总结
5.1 极简配置
摒弃繁琐XML,约定大于配置,极大减少配置代码量。
5.2 自动装配
根据项目依赖自动推断环境,自动装配全套组件。
5.3 内嵌容器
内置Tomcat,无需外置部署,jar包直接启动,部署极其方便。
5.4 版本统一
官方统一管理依赖版本,彻底解决版本冲突问题。
5.5 极高拓展性
自动配置不满足时,可自定义配置、自定义Bean、完全覆盖默认规则。
六、高频面试题满分答案(本篇必背)
1、SpringBoot 和 Spring 的关系?
SpringBoot 是 Spring 框架的快速开发脚手架,底层完全基于 SpringIoC、AOP、SpringMVC,没有替换任何底层原理,只是对传统Spring繁琐配置做了自动化封装,简化开发与部署流程。
2、什么是约定大于配置?
SpringBoot 预设了一套默认开发规范,包括包扫描路径、配置文件名称、静态资源路径、默认端口等。开发者遵循默认约定即可零配置开发,仅在个性化场景需要手动修改配置,大幅简化开发。
3、@SpringBootApplication 包含哪些注解?
核心由三个注解组成:@Configuration标记配置类、@ComponentScan自动包扫描、@EnableAutoConfiguration开启SpringBoot自动配置能力。
4、SpringBoot启动流程简单描述?
通过SpringApplication.run()启动项目,首先初始化运行环境、加载配置文件,创建注解版IoC容器,刷新容器完成所有Bean的扫描、实例化、初始化、AOP增强,加载全套自动配置类,初始化内嵌Tomcat容器,最终启动成功对外提供服务。
5、Starter启动器的作用?
Starter是SpringBoot的依赖封装组件,整合某一功能所需的所有依赖与版本,开发者引入即可自动完成环境配置与功能装配,解决传统开发依赖繁琐、版本冲突的问题。
七、本篇总结 & 下期预告
本篇总结
本篇正式开启 SpringBoot 源码系列,打通 Spring 与 SpringBoot 的底层关联:
-
搞懂 SpringBoot 定位与核心设计思想
-
理解「约定大于配置」底层逻辑
-
吃透启动注解三大核心能力
-
掌握 SpringBoot 完整启动源码链路
-
明白 Starter 启动器设计原理
下期预告
下一篇重点攻克SpringBoot灵魂核心:自动配置源码全解!带你手撕 @EnableAutoConfiguration、SPI机制、条件注解、自动配置类加载规则,彻底搞定SpringBoot最核心、面试最高频的自动配置原理!
💡 往期推荐 & 系列连载
本Spring全家桶源码系列从零入门、层层递进,全网最系统源码实战教程!
更多推荐


所有评论(0)