官方文档来源:
github.com/spring-proj…
Spring Framework 7.0 已正式发布,这是 Spring 在进入 AOT/GraalVM 时代后的又一个重大版本。相比 Spring 6.x,这次更新覆盖了基线升级、模块移除、API 弃用、新增特性、测试体系增强等多个方面。
本文基于官方 Release Notes,整理成一篇深入且可直接用于项目升级的技术文章。
目录
- Spring Framework 7.0 的整体定位
- 基线版本与兼容性要求
- 移除与破坏性变更(Breaking Changes)
- 已弃用(Deprecated)功能
- Spring 7.0 新特性总览
- Spring MVC / WebFlux 关键增强
- HTTP Client / Interface Client 增强
- 核心框架(Core Container)增强
- 测试框架 TestContext 增强
- 升级建议(针对实际项目)
- 总结
Spring Framework 7.0 的整体定位
Spring Framework 7 是 Spring Boot 4.x 的基础,是未来 Spring 生态的重要技术支点,主要关注:
- AOT 优化与 GraalVM 时代适配
- Jakarta EE 11 与 Java 17+ 的现代化基线
- 更统一的 API 设计
- 更安全、可预测的反射与类处理机制
- 更强的 HTTP、Web、客户端调用支持
- 更完善的测试体系
Spring 7 是一次“架构级的稳态升级”。
基线版本与兼容性要求
官方明确了 Spring 7 所依赖的运行环境:
| 组件 | 要求 |
|---|---|
| Java | 最低 JDK 17(推荐 21+) |
| Jakarta EE | 11 |
| Servlet 容器 | Servlet 6.1+(Tomcat 11、Jetty 12.1) |
| JPA | 3.2(Hibernate ORM 7.1–7.2) |
| Kotlin | 2.2 |
| GraalVM | JDK 21/25 |
移除与破坏性变更(Breaking Changes)
1. 移除 spring-jcl 模块
Spring 7 移除了 spring-jcl,采用 Apache Commons Logging 1.3.0。
2. 移除 javax.annotation 和 javax.inject
迁移方式:
import jakarta.annotation.PostConstruct;
import jakarta.inject.Inject;
3. 移除旧式路径匹配配置
包括:
- suffixPatternMatch
- trailingSlashMatch
- favorPathExtension
- ignoreUnknownPathExtensions
4. 移除 Undertow 支持
Undertow 不支持 Servlet 6.1,Spring 7 取消官方支持。
5. 移除过时的 async / HTTP 支持
- ListenableFuture
- WebJars Core
- OkHttp3
- 老式 WebSocket fallback
6. HttpHeaders 不再实现 MultiValueMap
HttpHeaders headers = new HttpHeaders();
// 不再作为 Map 使用
7. JUnit Jupiter 生命周期变更
SpringExtension 模式调整,影响 @Nested 测试类。
已弃用(Deprecated)功能
1. RestTemplate
将在未来版本被正式移除,推荐:
- WebClient
- HTTP Interface Client
2. <mvc:*> XML 命名空间弃用
全部转向 Java Config。
3. Jackson 2.x 弃用
建议升级到 Jackson 3.x。
4. PathMatcher 弃用
使用 PathPatternParser。
Spring 7.0 新特性总览
- Null-safety:支持 JSpecify
- 支持 Java 24+ ClassFile API
- AOT 增强
- BeanRegistrar 新注册体系
- 默认使用 CGLIB 代理
- SpEL 对 Optional 支持增强
- 原生 @Retryable / @ConcurrencyLimit
- API Versioning
- HTTP Interface Client 增强
- HttpMessageConverters 集中管理
- TestContext 优化
- Kotlin 协程上下文传播
Spring MVC / WebFlux 关键增强
1. API Versioning
@RestController
@RequestMapping("/users")
@ApiVersion("v2")
public class UserControllerV2 {}
默认版本:
@ApiVersion(defaultVersion = true)
2. PathPattern 增强
"/**/pages/index.html"
3. HttpMessageConverters 统一管理
@Bean
public HttpMessageConverters converters() {
return HttpMessageConverters.builder()
.add(new MappingJackson2HttpMessageConverter())
.build();
}
HTTP Client / Interface Client 增强
1. @ImportHttpServices
@ImportHttpServices(MyApi.class)
@Configuration
class HttpConfig {}
2. 大文件流式传输
InputStream download();
void upload(OutputStream body);
核心框架(Core Container)增强
1. JSpecify Null-Safety
引入:
- @Nullable
- @NonNull
- @NullMarked
2. BeanRegistrar
@BeanRegistrar
public class MyRegistrar {
public void register(BeanRegistrationContext ctx) {
ctx.register("beanA", BeanA.class);
}
}
3. 原生重试与并发限制
@Retryable(maxRetries = 3)
public void retryLogic() {}
@ConcurrencyLimit(5)
public void limited() {}
测试框架 TestContext 增强
- ApplicationContext 可自动关闭
- 更好的 @Nested 支持
- AOT 测试更稳定
@Nested
class InnerTests {
@Test
void testNested() {}
}
升级建议(针对实际项目)
1. 同步升级依赖
- Tomcat 11 / Jetty 12
- Hibernate 7
- Jackson 3
- Jakarta EE 11
2. 全量迁移 javax.*
javax.annotation.* → jakarta.annotation.*
3. 检查 HttpHeaders 用法
4. 替换 RestTemplate → WebClient / HTTP Interface
5. 删除旧路径匹配配置
6. 并发 + 异步 + 事务需重点测试
总结
Spring 7 的优势:
- 强大 AOT 支持
- API Versioning
- 更统一的代理体系
- 更现代化 HTTP Client
- 丰富 Null-safety
- 更好的测试框架
升级需注意:
- 同步升级容器、JPA、Jackson、Reactor
- 删除 javax.*
- 替换 RestTemplate
- 检查路径匹配、AOP 行为变化
Spring 7 是未来 Spring Boot 4.x 的基础,是进入新一代应用架构的关键一步。