Spring 是什么:模块组成与版本/Jakarta 变化
结论先行:Spring 是以 IoC(控制反转)容器为核心的 Java 企业级开发框架,核心理念是"IoC/DI 解耦对象 + AOP 抽取横切逻辑",推荐编程模型是 JavaConfig + 注解。版本上要抓住两条主线:Spring Framework 5.x 用 javax.* 命名空间;6.0 起全面迁到 jakarta.*(Java 17 基线);当前主线是 Spring Framework 7.0(2025-11 GA,与 Spring Boot 4.0 配套,最低 Java 17、官方推荐 Java 21)。
一、Spring 是什么
- 定位:轻量级、开源的"一站式"应用框架,把对象管理、事务、Web、数据访问等通用能力抽象成统一模型;
- 不只是一个 IoC 框架:围绕核心容器发展出 AOP、事务抽象、MVC/WebFlux、Security、Data、Cloud 等完整生态;
- 与 Spring Boot 的关系:Boot 基于 Framework 提供"约定优于配置 + 自动装配",让框架开箱即用,但底层 IoC/AOP/事务语义仍是 Framework 的,Boot 只是"加速器"。
二、模块组成
| 模块组 | 核心模块 | 职责 |
|---|---|---|
| Core Container | spring-core / spring-beans / spring-context / spring-expression | IoC 容器、Bean 定义与依赖注入、SpEL 表达式 |
| AOP | spring-aop / spring-aspects | 面向切面编程,声明式事务的地基 |
| 数据访问/集成 | spring-jdbc / spring-tx / spring-orm / spring-jms | 事务抽象、JDBC/ORM 整合 |
| Web | spring-web / spring-webmvc / spring-webflux / spring-websocket | 传统 Servlet MVC 与响应式 Web |
| 测试 | spring-test | 集成测试、Mock、事务性测试支持 |
三、版本与 Jakarta 命名空间变化
- Spring Framework 5.3.x:javax.* 命名空间,Java 8+,javax 时代的最后稳定线;
- Spring Framework 6.0(2022-11):Java 17 + Jakarta EE 9 基线,javax.* 全部迁移为 jakarta.*(javax.servlet→jakarta.servlet、javax.validation→jakarta.validation、javax.annotation→jakarta.annotation 等);
- Spring Framework 6.1 / 6.2:6.x 演进线,持续功能增强与安全维护;
- Spring Framework 7.0(2025-11 GA):当前主线,对应 Spring Boot 4.0,最低 Java 17、官方推荐 Java 21;
- 速记映射:Spring Boot 3.x ↔ Framework 6.x;Spring Boot 4.x ↔ Framework 7.x。
// Framework 6+ / 7+ 的代码必须使用 jakarta 命名空间
import jakarta.servlet.http.HttpServletRequest;
import jakarta.validation.Valid;
常见追问 / 记忆点
- 追问 1:Spring 与 Spring Boot 什么关系?答:Boot 是 Framework 之上的快速开发框架,自动配置只是装配策略,不改变 IoC/AOP/事务内核。
- 追问 2:5.x 升 6.x 最大的改动?答:Java 基线升到 17,javax.* 整体换 jakarta.*,依赖库需同步升级。
- 记忆点:版本线记三个数——5(javax)、6(jakarta + Java 17)、7(2025 + Boot 4 + 推荐 Java 21)。