Spring Framework 6 相比 Spring Framework 5 进行了许多关键的改进和变化,涵盖了底层依赖、兼容性、核心功能、配置方式等多个方面。以下是 Spring Framework 6 的主要变化:
1. JDK 和 Jakarta EE 依赖升级
- 最低 JDK 版本:Spring 6 需要 JDK 17+,不再支持低于 JDK 17 的版本。
- Jakarta EE 迁移:Spring 6 迁移到 Jakarta EE 9+,所有
javax.*命名空间的 API 都被替换为jakarta.*(例如javax.servlet变为jakarta.servlet)。 - Java 17 相关特性:
- 更好的
sealed classes支持 Record作为 DTO- 增强
Pattern Matching
- 更好的
2. AOT(Ahead-of-Time)编译与原生镜像支持
- 支持 GraalVM 原生镜像:Spring 6 原生支持 GraalVM,结合 Spring Boot 3,可以更好地构建 轻量级、启动更快的原生应用。
- AOT 编译支持:
- 通过
spring-aot生成静态代码,提高 Spring 应用的启动速度。 - 移除了基于运行时反射的部分代码,优化了 编译时代码分析。
- 通过
3. Core Container(核心容器)增强
- 改进
@Autowired处理:改进依赖注入的推断逻辑,提高运行时效率。 - 增强
Context Indexer:更高效的 Spring 组件扫描,减少Classpath资源加载时间。 @Nullable处理优化:Spring 6 更严格地解析@Nullable,提供更好的空指针安全性。
4. Observability(可观测性)增强
- Micrometer 观测支持:
Micrometer Observation API被整合到 Spring 6 中,用于应用监控、分布式追踪(Tracing)。- 提供对 OpenTelemetry 的集成支持,可以方便进行日志、指标、分布式追踪的监控。
5. Web 相关改进
5.1 Spring MVC
- Jakarta EE 迁移:所有 Servlet API 迁移到
jakarta.servlet。 - 更强的 HTTP/2 & WebSocket 支持:针对 WebFlux 进行优化,提高响应式 Web 应用的吞吐量。
- HTTP 接口:Spring 6 引入了
@HttpExchange,类似于 Feign,可以直接在接口上定义 HTTP 调用:@HttpExchange("/users") public interface UserClient { @GetExchange("/{id}") User getUserById(@PathVariable Long id); }
5.2 Spring WebFlux
- Reactor 3.5 及 Java 17 支持:Spring WebFlux 采用 Reactor 3.5+,改进了非阻塞编程模型。
- 响应式 HTTP 服务器 Netty 强化:优化了
Netty作为 WebFlux 的后端,提高并发性能。
6. 安全框架 Spring Security 6
- 完全迁移到 Jakarta EE(
javax.servlet→jakarta.servlet)。 - OAuth 2.1 支持:
- 弃用
OAuth 2.0 Implicit Flow,更推荐PKCE(Proof Key for Code Exchange)。 OAuth 2.1默认开启Authorization Server端点。
- 弃用
RequestMatcher语法改进:更现代化的请求匹配方式。
7. Spring Data 和事务管理增强
- Spring Data JPA 3.0:
- 兼容 Hibernate 6+,提高 ORM 查询性能。
EntityGraph支持DTO Projection,增强复杂查询功能。
- 事务管理优化:
@Transactional语义增强。- 提供
TransactionManager的更多扩展。
8. 其他优化
- 移除早期过时 API(如
RestTemplate建议迁移到WebClient)。 - 弃用 CGLIB 代理,推荐使用 JDK 动态代理。
- 优化 Kotlin 支持(Kotlin 1.7+ 支持)。
- JSON 处理优化:默认 JSON 处理库迁移到 Jackson 2.14+。
总结
| 变更点 | Spring 5 | Spring 6 |
|---|---|---|
| JDK 版本 | JDK 8+ | JDK 17+ |
| Jakarta EE 迁移 | javax.* |
jakarta.* |
| AOT 编译支持 | 无 | 支持 GraalVM 原生镜像 |
| Observability | 仅 Micrometer | Micrometer + OpenTelemetry |
| Spring MVC | 传统 RestTemplate |
新增 @HttpExchange |
| Spring WebFlux | Reactor 3.4 | Reactor 3.5 |
| Spring Security | OAuth 2.0 | OAuth 2.1 + PKCE |
| 数据层 | Hibernate 5 | Hibernate 6 |
| 响应式增强 | WebClient | WebFlux + Netty 强化 |
Spring 6 主要面向:
- 现代 Java 生态(JDK 17+)
- 云原生应用(GraalVM & AOT 编译)
- 安全与监控(OAuth 2.1 & OpenTelemetry)
- 响应式开发(Reactor 3.5+)
如果你的项目仍在使用 Spring 5,需要评估 Jakarta EE 迁移带来的代码改动,并适配 Java 17 以顺利升级。
本文来自博客园,作者:茄子_2008,转载请注明原文链接:https://www.cnblogs.com/xd502djj/p/18760475
浙公网安备 33010602011771号