Spring 全栈硬核教程 · 总纲:生态全景图与学习路线
这是一套什么教程:市面上 Spring 教程的通病是"盲人摸象"——讲 Boot 的不提 Framework 底座,讲 Cloud 的默认你已经懂 Boot,讲 Security 的直接甩配置代码。这套教程反过来,先给你一张完整地图,再逐块深挖,每块都回答三个问题:它解决什么问题 / 它底层怎么实现 / 什么场景不该用它。
适合谁:想系统建立 Java 后端知识体系的学生;写了几年 Spring 但对"为什么这样设计"说不清楚的工程师;要做技术选型、带团队、或者要把这套东西讲给别人听的人。
版本基准(2026 年 9 月):Spring Framework 7 / Spring Boot 4.1 / Spring Security 7.1 / Spring Cloud 2025.1.x(Oakwood)。所有代码和结论都按这一代技术栈写,涉及与 Boot 3.x 差异的地方会显式标注——因为你大概率手上还有一堆 3.x 的存量项目要维护。
系列目录
| 篇章 | 主题 | 核心问题 |
|---|---|---|
| 00 总纲(本篇) | 生态全景、版本矩阵、学习路线 | Spring 到底有多少东西?我该按什么顺序学? |
| 01 Spring 核心 | IoC / DI / AOP / 事务 / 事件 / SpEL | 容器里到底发生了什么? |
| 02 Spring Boot | 自动配置 / Starter / 配置 / Actuator / 测试 | "约定优于配置"的魔法怎么实现的? |
| 03 Spring Web | MVC / WebFlux / REST / WebSocket / 客户端 | 一个 HTTP 请求的完整生命周期 |
| 04 Spring Data | JPA / MyBatis / Redis / R2DBC / 事务传播 | 数据怎么进出,怎么不出错 |
| 05 Spring Security | 认证 / 授权 / OAuth2 / JWT / 国产替代对比 | 谁能进来,能干什么 |
| 06 Spring Cloud | 注册发现 / 网关 / 熔断 / 配置中心 / 链路追踪 | 一个服务变成一百个之后怎么办 |
| 07 前沿与扩展 | Spring AI / Batch / Modulith / GraalVM / 虚拟线程 | 2026 年该关注什么 |
| 08 实战与避坑 | 完整项目 / 性能调优 / 面试题 / 生产事故复盘 | 怎么真正用起来不翻车 |
1. Spring 生态全景图:先看清楚象长什么样
很多人对 Spring 的认知是"一堆 starter",这是被 Spring Boot 的便利性宠坏的结果。真实的层次是这样的:
┌─────────────────────────────────────────────────────────────┐
│ 应用层扩展:Spring AI / Batch / Integration / Modulith / │
│ Session / Shell / GraphQL / Kafka / AMQP │
├─────────────────────────────────────────────────────────────┤
│ Spring Cloud(分布式):Gateway / OpenFeign / Config / │
│ Circuitbreaker / Stream / Bus │
│ Spring Cloud Alibaba:Nacos / Sentinel / Seata(国内主流) │
├─────────────────────────────────────────────────────────────┤
│ 能力模块:Spring Web(MVC/WebFlux) │ Spring Data │ │
│ Spring Security │ Spring Test │
├─────────────────────────────────────────────────────────────┤
│ Spring Boot:自动配置 + Starter + 内嵌容器 + Actuator │
│ (不是新框架,是"把下面这层用顺手"的引导层) │
├─────────────────────────────────────────────────────────────┤
│ Spring Framework(地基):IoC 容器 / AOP / 事务抽象 / │
│ 资源抽象 / 事件 / SpEL / 类型转换 │
├─────────────────────────────────────────────────────────────┤
│ JVM + Jakarta EE 11(Servlet 6.1 / JPA / Validation) │
└─────────────────────────────────────────────────────────────┘最关键的认知(很多工作三五年的人都还没建立起来):
Spring Boot 不是一个框架,它是一层"引导与装配"机制。 你用
@RestController写接口,干活的是 Spring MVC(spring-webmvc);你用@Transactional,干活的是 Spring Framework 的事务抽象 + AOP;Spring Boot 做的事只是"帮你把这些东西按约定装配好,并且在你没有自定义时给一套合理默认值"。
这个认知的实用价值在于:排查问题时你知道该去哪一层找。接口 404 是 MVC 的 HandlerMapping 问题,事务不回滚是 Framework 的 AOP 代理问题,依赖版本冲突是 Boot 的 BOM 仲裁问题——三层三种排查思路,混在一起想就永远是玄学。
2. 2026 年版本矩阵:先把版本对齐,再写代码
Spring 生态最大的坑不是技术难,是版本不对齐。下面这张表建议直接收藏:
| 组件 | 当前主线版本 | 底层依赖 / 兼容基线 |
|---|---|---|
| Spring Framework | 7.0.x | JDK 17 基线(官方推荐 JDK 25 LTS),Jakarta EE 11,Kotlin 2.2,GraalVM 24 |
| Spring Boot | 4.1.x(2026.6);4.0.x(2025.11) | Spring Framework 7,Servlet 6.1(Tomcat 11+ / Jetty 12.1+) |
| Spring Security | 7.1.x(7.0 随 Boot 4 发布) | Spring Framework 7 |
| Spring Cloud | 2025.1.x(代号 Oakwood) | 基于 Spring Boot 4.0.x,兼容 4.1.x;下一列车 2026.0.0(Paddington)对应 Boot 4.2 |
| Spring AI | 1.x 稳定版;2.0 里程碑阶段 | 2.0 基于 Spring Boot 4 |
| Java | 21 LTS(生态最成熟)/ 25 LTS(最新) | Boot 4 最低 17 |
血泪提醒:三个必须记住的版本事实
- Spring Boot 3.5 是 3.x 最后一个版本,社区免费支持已于 2026 年 6 月 30 日结束。还在 3.x 的项目该排升级计划了——不是明天就炸,但安全补丁不再免费供应。
- Spring Cloud 2025.0.0 与 Spring Boot 4.0.1+ 不兼容,必须用 2025.1.x 列车。这类"看起来版本号很接近其实互相打架"的情况在 Spring Cloud 上是常态,任何时候引入 Spring Cloud,先查官方兼容矩阵,别凭感觉选版本号。
- Undertow 在 Spring Framework 7 被移除支持,因为它还没适配 Servlet 6.1。如果你的项目用 Undertow 作内嵌容器,升级前先规划换 Tomcat 或 Jetty。
Boot 3 → Boot 4 迁移的主要断点(存量项目必看)
| 变更 | 影响 |
|---|---|
| Servlet 6.1 基线 | 必须 Tomcat 11+ / Jetty 12.1+,Undertow 出局 |
spring-jcl 模块移除 | 改用 Apache Commons Logging 1.3.0,多数应用无感 |
javax.annotation / javax.inject 注解支持移除 | 还有残留 javax.* 的代码必须清理干净 |
ListenableFuture 移除 | 改用 CompletableFuture |
| OkHttp3 支持移除 | 客户端改用 RestClient / JDK HttpClient |
Spring MVC 的 <mvc:*> XML 命名空间弃用 | 老 XML 配置项目需要转 Java Config |
Spring Security 7:and() 移除、authorizeRequests 移除 | 所有安全配置必须改成 Lambda DSL + authorizeHttpRequests |
| 代码库模块化拆分 | 部分类的包路径/artifact 归属变了,编译报错时先查迁移指南 |
一句话:Boot 3→4 不是"改个版本号",工作量介于 Boot 2→3(Jakarta 大迁移)和常规小版本升级之间。给存量项目做升级评估时,按"每个中型服务 3-5 人日"起估比较现实。
3. 学习路线:六个阶段,别跳级
这套教程按下面的节奏设计,强烈建议按顺序——跳过第二阶段直接学 Cloud 的人,最后都会回来补课。
阶段一 · 会用(1-2 周)
目标:能独立写出一个带 CRUD + 登录的单体服务
内容:Boot 起步 → Web 层基础 → 数据访问基础
产出:一个能跑的图书管理系统
⚠️ 这个阶段最大的陷阱是"以为自己学会了"——你只是学会了抄 API
阶段二 · 懂原理(2-4 周,⭐ 分水岭)
目标:能解释清楚"Spring 在背后做了什么"
内容:IoC 容器与 Bean 生命周期 → AOP 与动态代理 → 自动配置机制
→ DispatcherServlet 请求链路 → 事务传播与失效场景
检验标准:能徒手画出 Bean 生命周期图,能说清 @Transactional 的 7 种失效场景
⚠️ 90% 的人卡在这里不上不下,这也是面试能不能过的真正分水岭
阶段三 · 能做完整业务(3-4 周)
内容:Security 认证授权 → 缓存设计 → 参数校验与异常体系
→ 文件上传/导出 → 定时任务 → 消息队列集成
产出:一个有权限体系、有缓存、有异步处理的完整服务
阶段四 · 能做架构决策(4-6 周)
内容:MVC vs WebFlux 选型 → 单体 vs 微服务判断 → Spring Cloud 全家桶
→ 分布式事务 → 服务治理
检验标准:面对一个新需求,能说出"为什么选 A 不选 B"并给出量化依据
阶段五 · 能上生产(持续)
内容:可观测性三支柱 → 性能调优 → 容器化与 K8s → 灰度与回滚
→ 故障演练与复盘
⚠️ 这个阶段的知识只能在真实事故里长出来,看书学不会
阶段六 · 能带人、能创新(持续)
内容:前沿特性跟踪(虚拟线程/GraalVM/Spring AI)→ 自研 Starter 与内部框架
→ 技术方案评审 → 把复杂的东西讲简单不同背景的人怎么走这条路
| 你的背景 | 建议起点 | 特别注意 |
|---|---|---|
| 零基础学生 | 阶段一完整走完 | 别急着学微服务,把单体写扎实比什么都强 |
| 会 Go / Python 的转岗者 | 阶段一快速过,重点在阶段二 | Spring 的"重框架"哲学和 Go 的"显式组装"完全相反,心态上要接受"框架帮你做了很多事" |
| 三五年 Spring 经验 | 直接从阶段二开始查漏 | 你大概率会发现自己对 Bean 生命周期、事务传播、代理机制的理解有漏洞——这不丢人,这是行业常态 |
| 架构师 / 技术负责人 | 阶段四 + 阶段五 + 07 篇前沿 | 重点看各章的对比表和选型框架,那是给你准备的 |
4. 这套教程的"硬核"体现在哪
为了让你知道后面有什么值得期待,先剧透几个各篇里最硬的知识点:
- 01 篇:三级缓存解决循环依赖,为什么非要三级不能两级?(答案和 AOP 代理的时机有关)
- 02 篇:自动配置的发现机制从
spring.factories换成.imports文件,不只是换个文件名,背后是为 AOT 编译铺路 - 03 篇:
HandlerMethodArgumentResolver机制——教你写一个@CurrentUser注解,从此告别每个方法里手写SecurityContextHolder - 04 篇:事务传播行为的七种模式,配一张"什么场景用哪种"的决策表,以及
REQUIRES_NEW在高并发下的连接池陷阱 - 05 篇:Spring Security 过滤器链的完整顺序,以及为什么你的自定义 Filter 加在错误的位置会导致"认证信息莫名其妙丢了"
- 06 篇:分布式事务四种方案(2PC / TCC / Saga / 本地消息表)的真实成本对比——以及"大部分场景其实不需要分布式事务"的反直觉结论
- 07 篇:虚拟线程和 Go Goroutine 的调度模型对比,以及虚拟线程如何动摇了"高并发必上 WebFlux"的旧共识
- 08 篇:真实生产事故复盘——连接池打满、缓存雪崩、线程池拒绝、内存泄漏,每个都给出排查路径
5. 学习资源与工具清单
必备工具
| 类型 | 推荐 | 说明 |
|---|---|---|
| IDE | IntelliJ IDEA | Ultimate 版对 Spring 的支持(Bean 依赖图、端点视图)值回票价;社区版够用但少一些便利 |
| 构建 | Maven(入门)/ Gradle(大项目) | 教学场景一律 Maven,错误信息更直观 |
| 接口调试 | Apifox / Bruno / curl | Postman 越来越重,国内团队 Apifox 用得多 |
| 压测 | JMeter / wrk / k6 | 性能调优章节会用到 |
| 诊断 | Arthas | 阿里开源的 JVM 在线诊断神器,生产排查必备 |
| 容器 | Docker Desktop / OrbStack | Testcontainers 和本地中间件都要用 |
权威信息源(按可靠性排序)
- 官方文档
docs.spring.io—— 唯一权威,第三方教程都会过时 - GitHub Release Notes —— 想知道某个版本到底改了什么,看这里比看博客准
- Spring 官方博客
spring.io/blog—— 新特性的设计意图通常在这里讲得最清楚 - Baeldung —— 英文世界最系统的 Spring 教程站
- 中文技术博客 —— 有价值但务必核对版本,中文圈大量文章还停留在 Boot 2.x 时代
6. 给不同读者的阅读建议
如果你是学生:按 00 → 01 → 02 → 03 → 04 顺序读,每篇读完必须动手把代码敲一遍(不是复制粘贴,是敲)。05 之后的内容第一遍可以只看对比表,建立印象即可,等有项目经验再回头精读。
如果你有 3 年以上经验:直接跳到各篇的「硬核细节」和「对比选型」小节,用它们查漏。特别推荐 01 篇的代理机制、04 篇的事务传播、06 篇的分布式事务成本对比——这三处是经验丰富的工程师也经常有盲区的地方。
如果你要拿这套东西讲课/带新人:每篇末尾的「常见误解」和「事故复盘」是最好的课堂素材,比讲 API 有意思得多。另外 08 篇的面试题可以直接当作阶段性考核。
下一篇(01 · Spring 核心):我们从容器开始——一个 Bean 从 class 文件到可用对象,中间到底经过了多少道工序?为什么
@Transactional在同类方法里调用会失效?AOP 的 JDK 动态代理和 CGLIB 到底该选哪个?这些问题的答案,构成了整个 Spring 世界的物理定律。