Spring 6.0 变更 | Spring boot 3.0 抢先了解

码农沉思录

共 1323字,需浏览 3分钟

 · 2022-10-14

一、核心变动

基于 JSR-330 的 @Inject 注释现在可以在 jakarta.inject 包找到。基于 JSR-250 的注释  @PostConstruct 和  @PreDestroy 可以在  jakarta.annotation 中找到。目前,Spring 还会检测  javax 包下的这些注解,包括预编译二进制文件中的常见用法。

ListenableFuture 已被弃用, CompletableFuture 已经完全取代它。详见 27780。

二、数据和事务

由于Jakarta EE 的迁移,请确保升级到 Hibernate ORM 5.6.x 并使用 hibernate-core-jakarta 组件,同时切换 imports 包javax.persistence 到  jakarta.persistence。相应的Hibernate Validator 版本是 7.0.x,基于  jakarta.validation

三、Web 应用

由于Jakarta EE 的迁移,请确保升级到 Tomcat 10、Jetty 11 或 Undertow 2.2.14,并使用 undertow-servlet-jakarta 组件,同时切换 imports 包 javax.servletjakarta.servlet

一些基于过时的 Servlet 组件也已被弃用:例如 Commons FileUpload、Tiles,以及FreeMarker JSP 的支持。如果需要,我们建议使用内置的StandardServletMultipartResolver 进行文件上传和常规 FreeMarker 模板视图,并将重点放在面向 REST 的 web 架构上。

Spring MVC 和 Spring WebFlux 不再仅仅基于 @RequestMapping 注解来判定为控制器。这意味着基于接口的 AOP 代理可能不再适用于 web 控制器。请为此类控制器启用基于类的代理,否则接口也必须添加 @Controller 注解,详见 22154。

HttpMethod 改为了类,不再是枚举。虽然维护了 public API,但可能需要进行一些迁移(例如:EnumSet<HttpMethod> 更改为 Set<HttpMethod> ,使用  if-else 而不是  switch)。关于这一决定背后的讨论,详见 27697。

Kotlin 的扩展函数 WebTestClient.ResponseSpec::expectBody 现在返回的是 BodySpec 类型不再是 KotlinBodySpec。Spring6.0 使用了 Kotlin1.6,它修复了此方案的 bug(KT-5464)。这也意味着 consumeWith 不再可用。

RestTemplate 或者说 HttpComponentsClientHttpRequestFactory,现在需要 Apache HttpClient 5。


浏览 27
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报