Spring Framework 7.0 正式发布:最全更新解析与升级指南

326 阅读3分钟

官方文档来源:
github.com/spring-proj…

Spring Framework 7.0 已正式发布,这是 Spring 在进入 AOT/GraalVM 时代后的又一个重大版本。相比 Spring 6.x,这次更新覆盖了基线升级、模块移除、API 弃用、新增特性、测试体系增强等多个方面。

本文基于官方 Release Notes,整理成一篇深入且可直接用于项目升级的技术文章。


目录

  1. Spring Framework 7.0 的整体定位
  2. 基线版本与兼容性要求
  3. 移除与破坏性变更(Breaking Changes)
  4. 已弃用(Deprecated)功能
  5. Spring 7.0 新特性总览
  6. Spring MVC / WebFlux 关键增强
  7. HTTP Client / Interface Client 增强
  8. 核心框架(Core Container)增强
  9. 测试框架 TestContext 增强
  10. 升级建议(针对实际项目)
  11. 总结

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 EE11
Servlet 容器Servlet 6.1+(Tomcat 11、Jetty 12.1)
JPA3.2(Hibernate ORM 7.1–7.2)
Kotlin2.2
GraalVMJDK 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 新特性总览

  1. Null-safety:支持 JSpecify
  2. 支持 Java 24+ ClassFile API
  3. AOT 增强
  4. BeanRegistrar 新注册体系
  5. 默认使用 CGLIB 代理
  6. SpEL 对 Optional 支持增强
  7. 原生 @Retryable / @ConcurrencyLimit
  8. API Versioning
  9. HTTP Interface Client 增强
  10. HttpMessageConverters 集中管理
  11. TestContext 优化
  12. 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 的基础,是进入新一代应用架构的关键一步。