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 发布!

相关推荐
Reggie_L1 小时前
spring-cloud概述
java
贾修行1 小时前
深入浅出理解 Reactor:响应式编程的利器
java·reactor
hqxstudying4 小时前
J2EE模式---前端控制器模式
java·前端·设计模式·java-ee·状态模式·代码规范·前端控制器模式
ZeroToOneDev6 小时前
Java(LinkedList和ArrayList底层分析)
java·开发语言
没有bug.的程序员7 小时前
JAVA面试宝典 -《 架构演进:从单体到 Service Mesh》
java·面试·架构
典学长编程8 小时前
Java从入门到精通!第十一天(Java常见的数据结构)
java·开发语言·数据结构
皮皮林5518 小时前
设计一个多租户 SaaS 系统,如何实现租户数据隔离与资源配额控制?
java·saas
霍格沃兹软件测试开发8 小时前
Playwright 自动化测试系列(6)| 第三阶段:测试框架集成指南:参数化测试 + 多浏览器并行执行
java·数据库·mysql·自动化
Bonnie_12159 小时前
02-netty基础-java四种IO模型
java·开发语言·nio·jetty
我不是星海9 小时前
建造者设计模式
java·开发语言