🔥 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全家桶源码系列从零入门、层层递进,全网最系统源码实战教程!

更多推荐