Spring Framework 6.2 正式发布:开发者最值得关注的更新全览!

大家好,这里是架构资源栈 !点击上方关注,添加"星标",一起学习大厂前沿架构!

关注、发送C1即可获取JetBrains全家桶激活工具和码!

Spring Framework 6.2 正式发布!作为企业级 Java 应用的核心支柱,本次更新不仅带来了大量底层机制的重构和性能优化,还为开发体验、测试方式、Native 兼容性等维度注入了诸多现代化能力。小D第一时间为大家梳理出了其中最值得关注的亮点与注意事项。


升级必读:兼容性与依赖更新

Spring Framework 6.2 在依赖上有了一些基础性提升:

  • GraalVM 原生镜像支持需使用 Hibernate 6.5
  • FreeMarker 升级至 2.3.33
  • HtmlUnit 升级至 4.2
  • 支持 Protobuf 4.x,最低版本为 3.29
  • 推荐使用 Jackson 2.18,仍保留对 2.15+ 的兼容性

此外,一些废弃的 API 已被彻底移除,升级时建议参考对应 issue:30608、31492 和 33123。


核心容器的行为调整与增强

自动装配算法优化

新的自动装配规则调整了匹配优先级:参数名和 @Qualifier 的匹配优先于 @Priority ,从而更贴合开发者预期。而 @Primary 依旧拥有最高优先级。

并新增了全新的 @Fallback 注解,用于提供默认 Bean:

java 复制代码
@Bean
@Fallback
MyService defaultMyService() {
    return new DefaultMyServiceImpl();
}

当不存在其他同类型 Bean 时,@Fallback 会被自动采纳,而无需额外声明 @Primary

更严格的配置类校验

Spring 现在会明确拒绝一些无效的 @Configuration 声明,如:

  • @Bean 方法返回 void
  • @Bean 方法同时标注了 @Autowired

此外,泛型匹配也更严格,建议开发者检查构造参数、方法返回类型等是否完全匹配,避免类型擦除带来的注入失败。


更智能的启动与组件扫描机制

Spring 容器的锁机制也更细致:主线程采用严格锁定,而后台 Bean 初始化采用宽松锁。可通过 spring.locking.strict=true 控制恢复旧行为。

为了提升性能,类路径扫描默认启用了 jar 缓存,若导致异常可关闭缓存:

java 复制代码
resolver.setUseCaches(false);

此外,现在不允许将 @ComponentScan 与后期条件(如 @ConditionalOnBean)组合使用,否则将直接抛出异常。


配置解析与占位符增强

占位符解析器已被重写,提升了灵活性与容错性。支持转义 ${} 占位符,防止误解析:

properties 复制代码
my.prop=\\${actual.value}   # 解析为 ${actual.value}

若 key 中含 : 字符,需进行转义,如:${sub\://host}


SpEL 表达式引擎增强

现在可以自定义索引访问器(IndexAccessor)用于自定义结构的下标访问,同时也支持安全导航运算符对下标操作生效。访问属性时优先使用类型匹配更明确的 PropertyAccessor,行为更稳定。


RestClient 行为变更

以前这样写虽然不会报错,但并不会真正发出请求:

java 复制代码
ResponseSpec spec = restClient.get().uri("/spring").retrieve();

现在必须添加终止操作,如:

java 复制代码
ResponseEntity<Void> response = restClient.get().uri("/spring")
                                          .retrieve()
                                          .toBodilessEntity();

Web 领域的细节更新

  • 静态资源路径自动补 /,避免路径拼接异常
  • webjars-locator-core 被弃用,推荐使用轻量级版本 webjars-locator-lite
  • WebFlux 返回空响应体时不再自动写入 Content-Type
  • @ExceptionHandler 现已支持内容协商,自动根据客户端请求选择 JSON 或 HTML 响应格式:
java 复制代码
@ExceptionHandler(produces = "application/json")
public ResponseEntity<ErrorMessage> handleJson(IllegalArgumentException e) {
    return ResponseEntity.badRequest().body(new ErrorMessage(e.getMessage(), 42));
}

测试体验再升级!

支持 AssertJ 的 MockMvc API

终于不用再被 Hamcrest 束缚!现在可通过 AssertJ 写出更清晰、链式的测试语句:

java 复制代码
assertThat(mvc.perform(get("/vehicle/12")))
        .hasStatusOk()
        .body().isEqualTo("Honda Civic");

更复杂的 JSON 验证也变得简单:

java 复制代码
assertThat(mvc.perform(get("/message")))
        .body().json()
        .isLenientlyEqualTo(new ClassPathResource("samples/message.json"));

动态属性注入、Bean 覆盖能力提升

支持在测试上下文中动态注册属性,也新增了 @TestBean@MockitoBean@MockitoSpyBean 等用于 Bean 重定义的测试注解,参考官方文档即可上手。


原生支持与安全能力并进

  • 引入 @RegisterReflection@ReflectionScan,方便原生应用注册反射信息
  • URI 解析逻辑更安全,默认遵循 RFC 3986,同时提供浏览器风格的宽容模式
  • 新增 UrlHandlerFilter,用于兼容旧的尾斜杠路径策略

其他值得一提的亮点

  • @Scheduled@DurationFormat 现在支持如 2h30m 这种更自然的时间表达方式
  • 支持从请求头中绑定数据到 @ModelAttribute
  • WebMvc 和 WebFlux 支持页面片段渲染,适配 htmx、Turbo 等前端工具
  • Spring Expression Language 对 varargs、数组索引支持更全面
  • Reactive 服务器(除了 Undertow)支持 Partitioned Cookies

Spring Framework 6.2 带来的变动不止于 API 调整,更是在架构理念与开发体验上的一次升级。对于追求开发效率、原生兼容性和测试友好度的 Java 团队来说,这次更新提供了不少实用新特性。建议升级前仔细阅读官方文档并充分测试现有项目。

本文由博客一文多发平台 OpenWrite 发布!

相关推荐
桦说编程4 小时前
Java 中如何创建不可变类型
java·后端·函数式编程
lifallen4 小时前
Java Stream sort算子实现:SortedOps
java·开发语言
IT毕设实战小研4 小时前
基于Spring Boot 4s店车辆管理系统 租车管理系统 停车位管理系统 智慧车辆管理系统
java·开发语言·spring boot·后端·spring·毕业设计·课程设计
没有bug.的程序员5 小时前
JVM 总览与运行原理:深入Java虚拟机的核心引擎
java·jvm·python·虚拟机
甄超锋5 小时前
Java ArrayList的介绍及用法
java·windows·spring boot·python·spring·spring cloud·tomcat
阿华的代码王国5 小时前
【Android】RecyclerView复用CheckBox的异常状态
android·xml·java·前端·后端
Zyy~5 小时前
《设计模式》装饰模式
java·设计模式
A尘埃6 小时前
企业级Java项目和大模型结合场景(智能客服系统:电商、金融、政务、企业)
java·金融·政务·智能客服系统
青云交6 小时前
Java 大视界 -- 基于 Java 的大数据可视化在城市交通拥堵治理与出行效率提升中的应用(398)
java·大数据·flink·大数据可视化·拥堵预测·城市交通治理·实时热力图
CHEN5_027 小时前
【Java基础面试题】Java基础概念
java·开发语言