Skip to content
返回

Spring Boot 4 模块化架构扫盲笔记

下班之后没人亲亲,敲段代码哄自己开心。写个demo修完bug,誓让女神喊你哥哥。

一句话概括

Spring Boot 4 把原来”一锅炖”的自动配置,拆成了独立的”小火锅”——按需取用,互不干扰。

为什么要模块化?

以前的痛点

假设你写一个简单的 REST 接口:

@RestController
public class HelloController {
    @GetMapping("/hello")
    public String hello() {
        return "Hello";
    }
}

在 Spring Boot 3.x 里,引入一个 spring-boot-starter-web,它会:

问题:启动慢、内存大、依赖臃肿。


4.x 怎么改的?

核心思路:拆分

把原来的 spring-boot-autoconfigure 大包,拆成多个独立模块:

模块负责功能
spring-boot-webmvc传统 Servlet Web 应用
spring-boot-webflux响应式 Web 应用
spring-boot-data-jdbcJDBC 数据访问
spring-boot-flyway数据库迁移管理
spring-boot-webclient独立 WebClient 支持

实际体验

以前

<!-- 引入 web 包,所有功能全进来 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

现在(按需选择):

<!-- 精确引入,只用哪个引哪个 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-webmvc</artifactId>
</dependency>

模块化的具体升级点

1. 依赖更精细

3.x4.x
spring-boot-starter细粒度模块如 spring-boot-webmvc
全家桶式引入按需引入

2. 启动更快

3. 内存占用降低

4. 可维护性提升


对开发者有什么影响?

✅ 好消息

⚠️ 需要注意


升级建议

渐进式

Spring Boot 2.x → 3.x → 4.x

不要跳级!

先检查依赖

确认你的依赖是否已有 4.x 兼容版本,特别是:


总结

维度3.x 及以前4.x
依赖方式starter 全家桶细粒度模块
启动速度较慢快 30%-50%
内存占用较高显著降低
代码组织大一统职责清晰

模块化本质:把”瑞士军刀”拆成”专用工具”——用哪个拿哪个。

PS:模块化是进步还是倒退?

spring-boot-starter 最开始的设计是引用一个就能干所有事,现在需要自己判断引用哪个,是否是技术倒退?

我的看法:不是倒退,是技术成熟后的必然分叉。

两阶段设计哲学不同

阶段Spring Boot 版本设计哲学适用场景
起步期1.x-2.x”零配置开箱即用”快速原型、学习入门、中小项目
成熟期3.x-4.x”精确按需组装”生产级微服务、云原生、资源敏感场景

本质:Spring Boot 从”帮你省事”转向”帮你省钱省资源”。

为什么是进步而非倒退?

1. 复杂度的转移

这是从”保姆模式”升级到”工具箱模式”——不是退步,是信任用户。

2. 云原生的现实压力

“全家桶”在云时代是奢侈品。

3. 技术栈分化加剧

现在一个项目可能用:

一个 starter 包打天下已经不现实,技术选型本就需要判断。

那到底是不是增加负担?

看你怎么用:

场景建议
学习/原型/Demo直接用传统 starter,快就行
生产级微服务精确引入,省资源
大单体应用starter 全家桶也没问题

负担的本质:是你需要知道”我到底在干什么”——这个认知成本是必须支付的。

类比一下

阶段类比
Spring Boot 1.x-2.x宜家全套家具,买回家直接用,可能有冗余
Spring Boot 4.x乐高积木,自己拼,刚好够用

从”套餐”到”自助餐”——不是倒退,是给你选择权。

我的观点


Share this post on:

Previous Post
Spring Boot 4 的 Jackson 3 把这些 API 全改了
Next Post
3分钟替你学会@AutoConfiguration注解