《Spring Boot 入门》序

《Spring Boot 入门》的序。从 Spring Boot 今天在 Java 生态中的位置谈起,说明本站既有的 92 篇 Java 与 Java 企业级开发专题做的是「单点深挖」、这套书补的是「从零到能上手」的递进路径,并交代 4.x 破坏性变更带来的影响、面向的读者,以及一个诚实的阅读预期。

本篇目标:说清楚这套书为什么存在——它与本站既有的 Java 与 Java 企业级开发专题如何分工,市面上的 Spring Boot 资料在 4.x 时代为什么大面积失效,以及一个诚实的阅读预期。
适用版本:Spring Boot 4.1.x(Java 21)

写在前面

如果有人问「2026 年想做一个 Java Web 后端该从哪里开始」,答案大概率是 Spring Boot。它把 Spring 框架早年那种繁琐的 XML 配置压成一行 main 方法加几个注解,让一个能返回 JSON 的 HTTP 服务在几分钟内跑起来。但「几分钟能跑起来」也带来一个副作用:很多人照着教程拼出一个能启动的应用,却说不清它为什么能启动。

这套书想解决的就是这段距离。它不打算做成速查手册,也不打算穷尽每一个自动配置项,而是带你从「这是什么东西」走到「我在真实项目里能放心地用它做决定」。这篇文章是旅程开始前的一段说明:Spring Boot 今天站在哪里,这套书为什么值得写,以及你该抱着什么预期翻开它。

这套书分入门、实战、高级三卷。你手上的这一卷只做一件事:把地基打平——把 Spring Boot 的机制、约定与常用写法讲清楚,让你能独立写出一个结构合理的小应用。等你能自如地装配一个单体服务之后,实战卷会带你把工程规模做大,高级卷才会进入原理与性能的深水区。三卷之间是递进的,但入门卷本身是自足的:读完它,你不必依赖后两卷也能干活。

Spring Boot 今天的位置

在讨论「怎么学」之前,先看清它站在哪里。Spring Boot 的特别之处在于:它不是一门语言,也不是一个框架,而是一整套把 Spring 生态装配起来的约定。大致可以这样概括:

层面代表内容本书覆盖
快速启动起步依赖、自动配置、内嵌服务器第 2–4 章
Web 开发MVC 控制器、参数绑定、异常处理第 8、10、11 章
数据访问Spring Data JPA、事务、数据库迁移第 12–15 章
配置与外部化application.yml、Profile、配置优先级第 6 章
测试单元测试、切片测试、集成测试第 17 章
交付日志、打包、部署第 16、18 章

这种「什么都能做」的广度,是 Spring Boot 最大的优势,也是初学者最大的困惑来源:正因为覆盖面太广,反而不知道该先学什么。市面上的教程往往默认你已经选好了方向,直接开讲某个注解;而一个还没建立整体心智模型的人,跟着这类教程走,学到最后常常只记住了一堆注解,却说不清它们背后发生了什么。

它解决的到底是什么问题

要理解 Spring Boot 的价值,最好回到它出现之前。在 Spring 的早期,装配一个带数据库访问的 Web 应用意味着大量 XML:

<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource">
    <property name="jdbcUrl" value="jdbc:h2:mem:testdb"/>
    <property name="username" value="sa"/>
    <property name="password" value=""/>
</bean>

<bean id="entityManagerFactory"
      class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="packagesToScan" value="com.example.domain"/>
</bean>

<bean id="transactionManager"
      class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>

这段配置在今天看来繁琐,但它精确地表达了「一个应用由哪些组件拼成」。Spring Boot 做的不是把这段配置变没了,而是把它变成了可以被推断的默认值:

spring:
  datasource:
    url: jdbc:h2:mem:testdb

只要 classpath 上同时存在连接池与 JPA 的实现,Spring Boot 就会自动创建数据源、实体管理器工厂与事务管理器——这就是「约定优于配置」。理解这一点很重要:自动配置不是魔法,而是一组写在框架里的、带条件的默认值。 第 4 章会把「条件」这一层拆开讲,第 7 章则会教你如何调试它。

关注点传统 SpringSpring Boot
组件装配手写 XML 或 @Bean自动配置 + 条件判断
依赖管理逐个指定版本起步依赖与 BOM 统一
服务器打包 war 部署到外部容器内嵌 Tomcat,jar 直接跑
配置来源分散在多个文件application.yml + 优先级规则

一个具体的对照:注解只是入口

抽象地说「机制重要」很容易变成口号,不如看一个具体到不能再具体的例子。几乎每篇 Spring Boot 入门教程的第一个示例都长这样:

@RestController
public class HelloController {

    @GetMapping("/hello")
    public String hello() {
        return "Hello, Spring Boot";
    }
}

启动应用、访问 http://localhost:8080/hello,浏览器返回 Hello, Spring Boot。教程到这里通常就结束了,最多补一句「@RestController 相当于 @Controller 加 @ResponseBody」。

但真正决定这段代码能不能工作的,是背后一连串你还没看见的东西:请求进入内嵌 Tomcat 之后,由谁把它交给哪个方法?@GetMapping 是怎么被解析成一条路由的?返回的字符串为什么会被当成响应体而不是视图名?如果两个方法映射到了同一个路径,启动时会发生什么?

2026-10-09T15:42:07.840+08:00  INFO 43496 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 0 ms

这行日志里出现的 DispatcherServlet,就是上面那串问题的中心。本书第 8 章会把这条链路拆开讲清楚——不是让你背下类的名字,而是让你在路由冲突、参数绑定失败、返回值不符合预期时,知道该去查哪里。记住注解是入门,理解注解背后发生了什么才算真的会用。

为什么还要从零再写一套入门教程

看到这里你可能会问:Spring Boot 的教程已经铺天盖地,本站也已经积累了 92 篇 Java 与 Java 企业级开发的专题文章,为什么还要再写一套?

因为「多」和「对」是两回事。把市面上的资料放在一起看,会发现几个反复出现的问题:

问题具体表现后果
版本过时仍在用 2.x 或 3.0 的写法,配置项与包名早已改变复制出来的代码编译不过或行为不符
片段化只给一段孤立的代码,不交代它在项目中的位置读者拼不出一个完整可运行的应用
只讲注解不讲机制告诉你写 @Transactional 就自动有事务一旦事务不生效,完全无从排查
4.x 破坏性变更后失效4.0 做了大规模模块化重构,旧教程的包名与 starter 名全部过时按旧教程排错,越查越乱

最后一条尤其关键。Spring Boot 4.0 是一次罕见的破坏性重构:模块名、根包名、起步依赖名都变了,Jackson 升级到 3.x 后连包名都从 com.fasterxml.jackson 变成了 tools.jackson。这意味着你在搜索引擎里找到的绝大多数 3.x 时代的答案,放到 4.x 项目里可能连类都找不到。本书的所有示例都以 4.x 为准,并在涉及差异的地方单独标注 3.x 的写法。

这套书与本站专题的分工

本站已有 92 篇 Java 与 Java 企业级开发的专题文章,覆盖了并发、JVM、分布式、可观测性等方向。它们质量不低,但有一个共同特点:每一篇都假设你已经会 Spring,然后带你在某个单点上钻深。这恰恰是它们对初学者不友好的地方——一个连自动配置都还没搞清的人,去读一篇讲分布式事务的文章,收获会很有限。

这套书要补的是另一条路。两者的分工可以这样理解:

维度专题文章这套书
目标就一个问题钻到底按顺序把地基打牢
组织单点独立,篇与篇之间不假设顺序递进教学路径,章与章有前置依赖
示例聚焦机制本身的最小片段围绕一个完整项目持续演进的可运行代码
读法遇到具体问题时查阅系统通读,或当手册按需跳读

换句话说:专题负责「深」,本书负责「通」。 你在 Java 专题 与 Java 企业级开发专题 里读到的是某一口井有多深,本书要做的则是把井与井之间的路修出来。读完本书,你再去读那些专题,才能真正读出味道。

这套书想解决什么问题

把上面的分析收束一下,这套书的目标有三个:

  • 给出一条从零到能上手的完整路径。 从「Spring Boot 是什么」开始,经过环境搭建、第一个 REST 接口、自动配置原理、依赖注入、配置管理,一路走到数据访问、测试与打包部署,中间不跳步。
  • 把「为什么」讲在前面。 每个概念先给「为什么需要它」,再给「怎么用」,最后给「常见坑」。注解是入口,机制才是目的。
  • 保证示例可以真的跑起来。 书中代码在本机实跑过,输出是真实结果,版本号明确到补丁级,避免你因为版本漂移得到不同的结论。

面向谁

这本书面向的是「会 Java 语法、但没系统用过 Spring」的人。不同起点的人读法不同:

你的背景建议
会 Java 基础语法,没碰过 Spring按顺序通读,重点是第 4、5、6 章的原理部分
用过 Spring 但没系统学过 Spring Boot可以快速扫过第 2、3 章,重点放在自动配置与配置管理
用过 Spring Boot 3.x,想迁移到 4.x重点读第 1 章的版本线与每节标注的「3.x 差异」
只想查某个注解怎么用直接看附录 A 的注解速查表,再回正文看完整推导

如果你完全没有 Java 基础,这本书不适合作为你的第一本编程书——它不会从「什么是变量」讲起。如果你已经是资深后端,日常在写 Spring Cloud 微服务,那么本书的前半部分对你会偏浅,可以直接跳到第 7 章之后,或者去看本站的进阶专题。

本书不写什么

说清楚不做什么,往往比说清楚做什么更有助于建立正确的预期。这套入门卷不会:

  • 从零教你 Java 语法。 它假设你能读懂类、接口、泛型与注解的基本写法,知道 public static void main 是什么意思。
  • 深入某个中间件的全貌。 会用 Spring Data JPA 与 Flyway,但不会把你训练成数据库专家;缓存、消息队列、搜索引擎只在需要时点到为止。
  • 讲微服务与云原生。 服务拆分、配置中心、网关、链路追踪属于本系列的实战卷与高级卷,入门卷只把单体应用的功课做扎实。
  • 讲前端工程。 本书示例统一返回 JSON,不涉及模板引擎与页面渲染的完整项目。
  • 承诺读完就精通。 18 章 54 节能让你扎实地入门,但精通是项目里磨出来的,不是读出来的。

一个真诚的阅读预期

最后,说清楚这套书能给你什么、不能给你什么,比堆砌赞美之词更有用。

读完你应当能够:

  • 独立搭起一个能跑的 Spring Boot 4.x 项目,理解它由哪些模块组成;
  • 说清自动配置是怎么发生的,并在它「不生效」时有办法排查;
  • 写出一组遵循 REST 约定的接口,并用 Bean Validation 校验入参;
  • 用 Spring Data JPA 完成一次增删改查,理解事务为什么有时不生效;
  • 为你的代码写出单元测试与集成测试,知道 @MockitoBean 该用在哪一层;
  • 用 Flyway 管理数据库结构,把应用打成可执行 jar 并部署起来;
  • 遇到「自动配置没生效」「事务没回滚」这类问题时,有一整套可以自己排查的思路,而不是只能去搜索引擎碰运气。

读完你不能够(也不会):

  • 成为微服务、云原生、高并发架构的专家——这些属于本系列实战卷与高级卷,以及本站的专题文章;
  • 记住每一个注解和配置项的写法——那本就不是靠记忆,而是靠查文档和速查表;
  • 承诺「读完就精通」——18 章 54 节能让你扎实地入门,但精通是在项目里磨出来的。

学习节奏:慢即是快

Spring Boot 的知识结构不是线性的,而是分层的。注解与配置的写法,你可以在几天内建立起大致印象;但「容器怎么启动」「Bean 怎么装配」「代理怎么生效」这些机制,需要你在真实项目里反复遇到、反复踩坑,才会真正变成直觉。指望一口气读完就掌握,通常不现实,也没必要。

更务实的做法是:先把第 4、5、6 章读透,建立最小可用的心智模型,然后回到你自己的小项目里写起来。遇到报错就翻回来查对应章节,遇到想不通的行为就把示例改一改,看应用怎么反应。这种「读一段、用一段、再回来读」的循环,比从头到尾硬啃要有效得多。

这里有一个具体的建议:每读完一章,动手写一个比书中示例略复杂一点的版本。 比如第 8 章讲完控制器,你可以试着加一个带查询参数的接口;第 12 章讲完 JPA,你可以试着自己加一张表、写一个查询方法。这种「多走一步」的练习,是让知识从「读过」变成「会用」的最短路径。

如果你时间有限,也不必强求一次读完整本。把第 2、3 章的环境配好,把第 4 章的原理读懂,再挑一个你感兴趣的方向(Web 或数据访问)往下走,同样能获得一个可用的起点——只是后面遇到复杂问题时,仍需要回来补上跳过的部分。

有了 AI 辅助,还需要系统学吗

这是当下绕不开的问题:编辑器里的补全与 AI 助手已经能生成大半段 Spring 配置,甚至顺手把注解和样板代码一起写上。那还有必要系统学吗?

答案是:AI 让「写出能跑的代码」变便宜了,但没有让「判断配置对不对」变便宜。 Spring Boot 的难点恰恰不在写,而在排错:自动配置没生效、事务没回滚、接口返回 404、循环依赖启动失败——这些问题 AI 往往给不出准确答案,因为它不知道你项目里到底引入了哪些依赖、哪些条件成立。理解自动配置的机制,正是为了在这些时刻有能力自己判断。

换句话说,AI 助手提高了「懂原理」的回报率:它在一个结构清晰、依赖明确的项目里最有帮助,在一个配置混乱、边界模糊的项目里,它给出的建议同样混乱。你越懂 Spring 的装配逻辑,工具就越有用。

关于「4.x 是不是太新了」

有读者可能会担心:现在就学 4.x,会不会太冒险,项目里还在用 3.5,学了用不上?

这个顾虑是合理的,但答案是:不会白学,反而更省事。 Spring Boot 4.x 的很多变化(模块化、Jackson 3、测试注解调整)是 Spring 团队为未来几年铺的路,3.5 是 3.x 的最后一个特性版本,其后的方向就是 4.x。更重要的是,本书在讲每个概念时都区分了「这是 Spring 的通用机制」与「这是 4.x 才有的写法」——前者在任何版本都成立,后者会明确标注。你在 3.5 项目里读到本书的机制部分,同样适用;遇到 4.x 专有的写法,书里也给了 3.5 的对照。

关于两条版本线的具体差异,前言 会集中交代一次,1.3 版本线的选择 则会展开讲清该怎么选。

一个贯穿全书的示例项目

为了不让每一章变成互不相干的片段,本书从第 8 章开始,会围绕一个统一的「图书管理」小服务逐步演进。它不会一步到位,而是随着你学到的能力一点点长大:

阶段章节这个阶段的样子
能响应第 8 章一个能返回图书列表的 REST 接口
能校验第 9 章用 Bean Validation 拦下不合法的入参
能报错第 10 章统一的错误响应格式
能跨域第 11 章允许前端页面调用这个服务
能持久化第 12–13 章用 JPA 把数据存进数据库
能保证一致性第 14 章用事务保证借书与还书的原子性
能演进第 15 章用 Flyway 管理表结构变更
能观测第 16 章结构化日志,方便排查问题
能验证第 17 章单元测试与集成测试
能交付第 18 章打包成可执行 jar 并部署

这样安排的好处是:你读到的每一段代码都不是孤立的,而是同一个项目在某一刻的真实状态。等你读完,手里就有了一个从零长起来的、结构清晰的小应用,而不是一堆看完就忘的示例片段。

致谢

最后,感谢每一位愿意把时间花在「搞懂原理」而不是「复制粘贴」上的读者。技术书的价值不在于它出版的那一刻,而在于它能否帮你在几年后遇到新问题时,仍然有一套可以依靠的判断方法。这套书想留给你的,正是后者。

结尾

语言和框架终究是工具,不是信仰。Spring Boot 的价值不在于它有多少个注解,而在于它把「装配一个可用的应用」这件事变得足够省心,让你能把精力放在业务上。如果这本书能让你在敲下每一行配置时,心里都清楚它为什么在那里,那它的任务就完成了。

那么,我们开始吧。下一站是前言 ,它会把版本口径、代码约定与阅读路径讲清楚;如果你已经等不及,也可以直接翻到 1.1 定位、生态与它解决的问题 。

继续阅读

探索更多技术文章

浏览归档,发现更多关于系统设计、工具链和工程实践的内容。

全部文章 返回首页

「java」更多文章

  1. 《Spring Boot 入门》18.3 打包与运行
  2. 《Spring Boot 入门》18.2 实现
  3. 《Spring Boot 入门》18.1 需求与设计