本篇目标:交代这套书的版本口径、术语约定、结构安排与三种阅读路径,让你在翻开第一节之前就知道代码按什么标准写、遇到版本差异去哪里查、以及该怎么读。
适用版本:Spring Boot 4.1.x(Java 21)
关于这本书
这是一本写给「想真正学会 Spring Boot」的人的书,而不是一本写给「想在面试前背几个注解」的人的书。入门卷共 18 章 54 节,另加序、前言、目录三篇前置内容与附录 A 到 D 四篇,合计 61 篇。它假定你愿意动手敲代码、愿意在启动日志里泡一会儿、愿意花时间想清楚「为什么这样设计」,而不是只想知道「这样写能不能跑」。
在正文开始之前,这一篇把体例讲清楚:这本书写给谁、怎么组织、代码按什么约定写、不同的人应该怎么读。读完它,你就能判断该从哪一页开始,以及哪些部分可以放心跳过。
目标读者与前置知识
最低前置知识:会 Java 基础语法,能使用命令行。Spring 本身不要求任何前置,本书从「Spring Boot 是什么」讲起。具体来说,你最好已经具备:
- 能读懂类、接口、泛型、注解与 Lambda 的基本写法;
- 知道
public static void main(String[] args)是什么,能跑一个简单的 Java 程序; - 能在终端里切换目录、执行命令,知道「文件」「路径」指的是什么;
- 能读懂最基础的英文报错信息里的关键词,比如
cannot find symbol、expected。
如果你会 Java 但没系统用过 Spring,这本书就是为你写的。建议按顺序读、每节动手敲,不要跳章。Spring Boot 的知识结构是层层叠加的——不理解自动配置,就读不懂起步依赖;不理解依赖注入,就读不懂事务为什么基于代理。
如果你用过 Spring 或 Spring Boot 3.x,可以快速扫过第 2、3 章,把重点放在第 4、5、6 章的原理,以及每节标注的「3.x 差异」上。你可能凭经验知道结论,但不知道机制,而机制正是迁移到 4.x 时最容易踩坑的地方。
全书结构:前置 3 + 正文 18 章 + 附录 4
全书按学习曲线分为四个部分,每一部分解决一类问题:
| 部分 | 章节 | 主题 | 解决的问题 |
|---|---|---|---|
| 第一部分 | 第 1–3 章 | 认识与搭建 | Spring Boot 是什么、4.x 有什么变化、怎么装环境写第一个接口 |
| 第二部分 | 第 4–7 章 | 核心机制 | 自动配置、依赖注入、配置管理、起步依赖如何协作 |
| 第三部分 | 第 8–15 章 | Web 与数据 | 写接口、校验参数、处理异常、访问数据库、管理事务与迁移 |
| 第四部分 | 第 16–18 章 | 观测与交付 | 日志、测试、打包部署与一个完整项目收尾 |
每一部分的内部也是递进的。以第二部分为例:第 4 章先拆开 @SpringBootApplication 与自动配置,第 5 章讲清容器与 Bean,第 6 章才落到外部化配置,第 7 章回到起步依赖与自动配置的调试——这一顺序不是随意的,没有容器与 Bean 的概念,配置绑定就无从谈起。
每一节的组织方式
为了让 54 节保持一致的节奏,正文的每一节都按同样的五段式组织:
- 本节目标:开头用一小段话说明这一节要解决什么问题、读完之后你能做什么,并标注适用版本。
- 正文小节:主体内容,以
## X.Y为节标题,其下再用### X.Y.n细分。每个小节聚焦一个具体问题,尽量给出可运行的代码与真实输出。 - 小结:末尾用几句话收束,点明这一节最值得记住的判断标准,而不是复述正文。
- 衔接下一节:用一句话指向下一节,说明接下来要解决的问题与本节的关系。
- 阅读导航:正文末尾一行给出「上一节 / 下一节」的链接,方便顺序阅读。
也就是说,每一节的开头都长这样:
本节目标:……(这一节要解决的问题)
适用版本:Spring Boot 4.1.x(Java 21)
这种结构的代价是每节都有一些重复的仪式感,好处是你随时可以抽出一节独立阅读,而不必担心缺少上下文。当作参考手册用时,这一点会尤其方便。
需要说明的是,本页(前言)以及序、目录和四篇附录并不遵循上面的五段式——它们不是「一节正文」,因此没有末尾的阅读导航行,而是以正常的段落收尾。这一点在你翻到附录时不必觉得奇怪。
版本口径
这是全书唯一集中交代版本的地方,请留意它,因为后面每一节都会默认你已经知道这些口径。
- 主线是 Spring Boot 4.1.1,对应 Spring Framework 7.0.9。书中凡是不特别标注的示例,都以这条线为准。
- 对照线是 Spring Boot 3.5.16,对应 Spring Framework 6.2.19。涉及行为差异时,会在小节里单独标注「3.x 差异」。
- 所有代码在 Java 21(Temurin 21.0.12.1+1 LTS)与 Maven 3.9.12 上实测,示例输出为真实结果,不是凭记忆写下的。
各组件在本机实测的版本如下表,供你在自己环境里对照:
| 组件 | 主线 | 对照线 |
|---|---|---|
| Spring Boot | 4.1.1 | 3.5.16 |
| Spring Framework | 7.0.9 | 6.2.19 |
| Java | 21.0.12.1(Temurin LTS) | 17+ 即可 |
| Maven | 3.9.12 | 3.9.12 |
| Servlet 规范 | 6.1(Jakarta EE 11) | 6.0(Jakarta EE 10) |
| 内嵌 Tomcat | 11.0 | 10.1 |
| Jackson | 3.0(tools.jackson) | 2.x(com.fasterxml.jackson) |
Spring Boot 4.x 的最低要求是 Java 17,本书选择 21 是因为它是当前的主流 LTS,也是本站其他 Java 专题的统一口径。如果你的项目仍停在 Java 17,本书的绝大多数示例仍可运行,只是少数用到 21 新特性的片段需要留意标注。
判断版本时,别靠记忆,直接看启动日志。4.1.1 的真实启动日志头部是这样的:
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v4.1.1)
2026-10-09T15:42:06.435+08:00 INFO 43496 --- [ main] com.example.probe.ProbeApplication : Starting ProbeApplication v0.0.1-SNAPSHOT using Java 21.0.12.1 with PID 43496
2026-10-09T15:42:07.027+08:00 INFO 43496 --- [ main] o.s.boot.tomcat.TomcatWebServer : Tomcat initialized with port 8080 (http)
2026-10-09T15:42:07.421+08:00 INFO 43496 --- [ main] com.example.probe.ProbeApplication : Started ProbeApplication in 1.101 seconds (process running for 1.749)
留意日志里 o.s.boot.tomcat.TomcatWebServer 这个包名——在 3.x 时代它是 o.s.b.w.embedded.tomcat.TomcatWebServer。这类包名的变化正是 4.0 模块化重构的直接证据,本书在涉及 4.x 的地方一律使用新包名。
术语约定
4.0 起,Spring Boot 对一批起步依赖做了改名,旧名虽然大多仍可用,但已被标记为废弃。本书正文一律使用新名,你在别处看到的旧名,可以按下表换算:
| 你可能见过的旧名 | 本书采用的新名 |
|---|---|
spring-boot-starter-web | spring-boot-starter-webmvc |
spring-boot-starter-aop | spring-boot-starter-aspectj |
spring-boot-starter-oauth2-client | spring-boot-starter-security-oauth2-client |
spring-boot-starter-web-services | spring-boot-starter-webservices |
spring-boot-starter-tomcat(war 部署) | spring-boot-starter-tomcat-runtime |
还有一类变化更隐蔽:以前只需引入第三方依赖就能用的功能,4.x 起需要专门的 starter。例如 Flyway 需要 spring-boot-starter-flyway,Liquibase 需要 spring-boot-starter-liquibase。如果你从 3.x 迁移过来,发现某个自动配置「突然不生效了」,先检查是不是缺了 starter——这一点在第 15 章会具体展开。
关于 4.x 与 3.x 的关系
很多读者会问:现在学 4.x,项目里还在用 3.5,会不会白学?
不会。本书在讲每个概念时都区分了两层:通用机制与版本写法。自动配置的条件判断、依赖注入的解析规则、事务基于代理的实现,这些在任何版本都成立;而 starter 的名字、包名、测试注解,则是 4.x 专有的。你在 3.5 项目里读本书的机制部分,同样适用;遇到 4.x 专有的写法,书里也给了 3.5 的对照。
真正需要留心的是从 3.5 迁移到 4.x 时的破坏性变更——模块化重构、Jackson 3、测试注解调整。这些会在 1.2 Spring Boot 4 有什么新变化 与 1.3 版本线的选择 两节集中讲清,附录 A 末尾还附了一张「3.x → 4.x 注解与包名变更对照表」,供你迁移时对照。
代码与示例约定
为了让你复制出来的代码能直接跑,本书在示例上有几条统一约定:
- 代码块都标语言:
java表示 Java 代码,yaml/properties表示配置,xml表示 Maven 配置,sql表示数据库脚本,bash表示命令行,text表示真实输出或启动日志。 - 输出与代码分离:Java 或配置块之后,紧跟的
text块是这段代码在本机跑出的真实结果,不是示意。 - 依赖版本明确:涉及第三方库时,书中给出实测的版本号,避免你因为版本漂移得到不同结果。
- 未能跑通的片段会显式说明:个别示例依赖你本机没有的环境(比如需要外部服务),这类片段会在正文里写明原因,而不是假装它跑通了。
- 省略处会标注:为了聚焦重点而省略与主题无关的部分时,会用
...或注释标明。
下面是一个符合上述约定的最小示例,你可以用它验证环境是否配置正确:
public class Hello {
public static void main(String[] args) {
System.out.println("Hello, Spring Boot");
}
}
Hello, Spring Boot
排版约定
为了让正文更易读,本书在排版上有几条固定的约定:
| 约定 | 含义 |
|---|---|
「」 | 术语强调或口语化引用,例如「自动配置」「起步依赖」 |
> 引用块 | 只出现在正文节开头,用来声明「本节目标」与「适用版本」 |
| 表格 | 用于对比、速查与取舍分析;表格里往往信息密度最高 |
text 代码块 | 紧跟代码块,内容是真实运行输出或启动日志 |
| 粗体 | 强调一句话里最关键的那半句,而不是用来好看 |
| 「3.x 差异」 | 出现在小节里,提示该写法在 3.5.x 上的不同 |
环境约定
推荐 Java 21 与 Maven 3.9 以上。本书的构建统一使用 Maven,第 2 章会带你从 JDK 安装一路走到第一个可运行的项目;附录 C 则给出了 Maven 与 Gradle 的对照,如果你习惯 Gradle,可以按那份对照换算。
编辑器不强制,但推荐能提供 Java 提示与运行配置的现代 IDE。具体怎么装 JDK、怎么配 Maven、怎么写第一个接口,2.1 JDK 与 Maven 环境搭建 与 2.2 从 start.spring.io 生成项目 会把这一步走完。建议第一次就把环境配好,因为后面每一节的示例都依赖它。
三种阅读路径
同一本书,不同的人有不同的用法。下面给出三种典型路径,你可以按自己的目标选择。
路径一:顺序通读。 适合零基础或想系统重建知识结构的人。从第 1 章开始按顺序读,每节都动手写代码,遇到不懂的标记下来继续读,读完一整章后回头解决标记的问题。这条路径的收益最完整,但需要耐心。
路径二:快速上手。 适合有其他语言或 Spring 经验、只想尽快能干活的人。可以跳过第 1 章的 1.1、1.2 与第 2 章的大部分,直接读第 3 章(第一个接口)、第 4 章(自动配置)、第 8 章(控制器)与第 12 章(数据访问)。大约两周可以写出结构清晰的小服务;之后再回头补第 6 章的配置管理。
路径三:当参考手册用。 适合已经会写 Spring Boot、需要查具体写法的人。这种情况下不必按顺序读,直接看目录定位到相关章节,利用每节的「本节目标」和「小结」快速确认是否命中需求。附录 A 的注解速查表与附录 B 的配置速查是为这种用法准备的,可以先从它们入手。
无论选哪条路径,都建议至少完整地动手跑通第 2、3 章的示例。环境配置与第一个接口是所有后续内容的地基,地基不稳,后面每一步都会变得别扭。
学习时间估算
为了让「按需跳读」这条路径可执行,这里给出一份粗略的时间参考(按每天投入一小时计):
- 第 1–3 章(认识与搭建):约 1 周。内容不深,但环境配置需要一点消化的时间。
- 第 4–7 章(核心机制):约 2.5 周。这是全书最重要也最需要慢下来的部分。
- 第 8–15 章(Web 与数据):约 4 周。可以结合手上的小项目同步实践。
- 第 16–18 章(观测与交付):约 2 周。更适合在有真实项目时精读。
总计约 9 到 10 周可以完成一遍系统学习。如果你的目标是「两周内能上手写接口」,集中读第 2、3、8 章也能获得一个可用的起点——只是后面遇到复杂问题时仍需要回来补课。
关于练习与验证
这本书没有独立的习题册,但每一节的示例本身就是练习。推荐的做法是:先看问题描述,自己尝试写一遍,再看书里的写法。Spring 的学习高度依赖「预判—验证」的循环——你先在脑子里推断某个自动配置会不会生效、某段代码会不会抛异常,然后让应用告诉你答案。这个循环跑得越多,你对框架行为的直觉就越准。
如果你在某个示例上卡住了,最有效的办法往往不是重读正文,而是故意把配置改坏,看看应用会报什么。启动日志本身携带了大量信息:它告诉你哪个条件不成立、哪个 Bean 没创建、端口有没有被占用。学会读日志,是这本书希望帮你建立的一项独立能力,附录 D 也专门汇总了高频报错与排查思路。
代码与环境的获取方式
本书不附带独立的代码仓库,原因很简单:示例足够短,短到你直接复制进编辑器就能用。与其维护一份可能随时间腐坏的仓库,不如让每一段代码都保持「自包含、可复制、可运行」的状态。
真正值得你准备的配套环境只有两样:一个装好 Java 21 的本机环境,以及一个带 Java 支持的 IDE。附录部分承担了「速查」的角色——附录 A 汇总注解,附录 B 汇总配置项,附录 C 汇总构建工具对照,附录 D 汇总常见错误与排查思路。它们不按教学顺序组织,而是按查阅顺序组织,适合在你写代码卡住时随手翻。
关于怎么判断自己真的学会了
学完一章之后,怎么知道自己是真懂了还是「读懂了」?下面这份清单可以用来自查。每一项都对应一种可以被观察的行为,而不是一种感觉:
- 看到一个需求,能先想清楚数据模型与接口边界,再动手写。 而不是先写一堆 Controller 方法,最后再回头整理。
- 能预判启动日志会打印什么。 在按下运行之前,你心里已经知道自动配置会创建哪些 Bean。
- 能读懂报错的意图,而不是它的字面。 看到「找不到某个 Bean」,你能说出是哪个条件没成立、为什么没成立。
- 知道什么时候不该用某个特性。 能判断某处写
@Transactional是必要,还是纯粹的堆砌。 - 能解释自己为什么这样配置。 面对「为什么这里用
@ConfigurationProperties而不是@Value」,你给得出理由。 - 能读懂启动日志里的自动配置报告。 打开
debug=true之后,能顺着输出找到某个 Bean 为什么没被创建。
反过来,下面这些信号说明你可能还停在「读过」的阶段:一遇到报错就上网搜现成答案;能看懂书里的例子但自己写不出来;分不清「能启动」和「配置正确」的区别;写完接口之后才回头补校验和测试。如果发现自己中了几条,不必沮丧,回到对应章节把示例亲手敲一遍,往往比再读一遍有效。
关于配套的专题文章
本站已有 92 篇 Java 与 Java 企业级开发的专题文章,覆盖并发、JVM、分布式、可观测性等方向。它们与本书是互补关系:本书负责按顺序把地基打牢,专题负责就某一个问题钻到底。学完本书之后,如果你还想深入某个方向,可以顺着这些专题继续往下读:
- Java 专题 :语言本身与 JVM 的深水区;
- Java 企业级开发专题 :并发、缓存、消息与分布式;
- 架构专题 与 可观测性专题 :把单个服务放进更大的系统里看。
不过建议你在读完第 4 章之后再去读它们——那时你才有足够的背景,去判断一篇文章到底在讲什么。
勘误与反馈
技术书难免有疏漏,尤其是涉及版本演进的细节。如果你在阅读中发现示例无法运行、表述有歧义,或者某个知识点讲得不够清楚,欢迎在站点相应页面留言指出。对于确认的问题,我会在后续修订中更新正文,并在页面的更新说明里标注。
需要说明的是,本书面向的是「长期有效的判断力」,而不是「某个月份的 API 清单」。框架在演进,具体的类名、配置项、默认行为都可能过时;但自动配置的原理、容器与 Bean 的模型、事务与代理的机制,保质期要长得多。如果某一天你发现书里的某个 starter 名又被改了一次,但其中的思路仍然有用,那这本书就达到了它想要的效果。
现在,让我们从第 1 章开始。先回答那个最朴素的问题:Spring Boot 到底是什么,它替我们解决了什么。
继续阅读
探索更多技术文章
浏览归档,发现更多关于系统设计、工具链和工程实践的内容。