2014 年,Spring Boot 1.0 横空出世,凭借「开箱即用」的理念彻底改变了 Java 开发方式。当时,它的核心自动配置包 spring-boot-autoconfigure 仅 182 KB。到了 Spring Boot 3.5,这个包已经膨胀至 2 MB,支持的功能越来越多,复杂度和体积也随之水涨船高。
在即将到来的 Spring Boot 4 中,官方团队对这一现状进行了彻底重构,正式引入 模块化(Modularization) 架构。这一改变不只影响项目结构和依赖关系,更为开发者带来了更轻量、更清晰、更高效的使用体验。对于长期关注 Spring Boot 生态的开发者来说,这绝对是一个值得关注的拐点。
Spring Boot 最大的优点之一,是能自动配置大量技术组件,如 Web、JPA、Redis、Kafka 等。随着支持范围不断扩大,几个问题也逐渐暴露出来:
- 臃肿的自动配置包:不管用不用,所有自动配置类都会被打进应用;
- IDE 提示噪音多:大量无关的类和配置建议混在一起;
- 启动扫描开销大:类路径越大,启动速度越慢。
Spring 团队意识到:想让 Spring Boot 继续保持「轻量」和「易用」,就必须重新设计架构边界。这正是 Spring Boot 4 模块化的出发点。
Spring Boot 4 将原先单体式的自动配置包 拆分为多个独立模块,每个模块只负责一种特定技术的自动配置:
| 模块名称 |
功能描述 |
spring-boot-webmvc |
传统 Servlet Web 应用 |
spring-boot-webflux |
响应式 Web 应用 |
spring-boot-data-jdbc |
JDBC 数据访问 |
spring-boot-flyway |
数据库迁移管理 |
spring-boot-webclient |
独立 WebClient 支持 |
每个模块都有清晰的边界,职责单一、依赖明确,整体可维护性因此提升了一个档次。
模块化带来的好处,主要体现在这几个方面:
- 可维护性更高:模块边界清晰,开发者和贡献者可以更专注特定技术领域,IDE 也能给出更精准的代码提示。
- 启动更快、内存占用更小:应用只引入所需模块,不再加载冗余功能,类路径扫描减少,启动时间和内存占用随之优化。
- 配置更精准:Spring Boot 4 能更准确识别依赖意图。比如只想用
WebClient 时,引入 spring-boot-webclient 模块即可,不需要再手动关闭 Web 服务器自动配置。
- 支持更多灵活用例:比如
Micrometer 监控模块可以独立使用,不用引入完整的 Actuator 依赖链。
模块化不只体现在主功能上,测试支持也随之重构。Spring Boot 4 新增了测试专用模块,比如:
spring-boot-data-jdbc-test
spring-boot-starter-webmvc-test
spring-boot-starter-security-test
spring-boot-starter-flyway-test
每个功能模块都有对应的测试 Starter,确保测试依赖和生产依赖保持一致且精简。
如果你想从 Spring Boot 3 迁移到 Spring Boot 4,大多数项目只需要三步:
- 更新 Starter 依赖
- 添加测试 Starter
- 更新包路径与自定义配置
模块化之后,包路径调整为 org.springframework.boot.<module>。如果项目里有手动导入的自动配置类或自定义 Starter,需要同步修改。
为方便老项目平滑迁移,Spring Boot 4 提供了 「Classic Starters」:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-classic</artifactId>
</dependency>
该模式会自动引入所有模块的自动配置,但不包含新的依赖结构,适合过渡阶段。开发者可以先迁移到 Spring Boot 4 的 Classic 模式,再逐步精简为独立模块。

Spring Boot 4 的模块化,不仅让框架本身更清晰、更轻量,也让开发体验变得更自然、更高效。对于想要构建更轻、更快、更可控的企业级应用的团队来说,这场升级值得认真对待。如果你正在做 Java 后端项目的长期维护,不妨提前关注模块化带来的依赖结构变化,为后续升级做好准备。
对模块化架构和 微服务 演进感兴趣的朋友,也可以到 云栈社区 看看更多实战经验和架构讨论。
|