拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 Spring Boot 3 和Spring Framework 6.0 – 新增功能

Spring Boot 3 和Spring Framework 6.0 – 新增功能

白鹭 - 2022-08-08 2316 0 2

一、概述

距离Spring Boot 3 的发布只有3 个月的时间。Spring Framework 6.0 可能会在Spring Boot 3 之前不久出现。所以现在是检查新功能的好时机。

2.Java 17

虽然之前已经支持Java 17,但这个LTS 版本现在获得了基线。

从LTS 版本11 迁移时,Java 开发人员受益于新的语言特性。因为在本文中,Java 本身不是主题,所以我们只命名Spring Boot 开发人员最重要的新特性。我们可以在Java 17、16、15、14、13 和12 的单独文章中找到任何详细信息。

2.1。记录

引入Java 记录(JEP 395,参见Java 14 记录关键字)旨在用作创建数据载体类的快速方法,即目标是简单地包含数据并在模块之间携带数据的类,也称为POJO (普通的旧Java 对象)和DTO(数据传输对象)。

我们可以轻松创建不可变的DTO:

public record Person (String name, String address) {}

目前,我们在将它们与Bean Validation结合时需要小心,因为构造函数参数不支持验证约束,例如,当实例在JSON 反序列化(Jackson) 上创建并作为参数放入控制器的方法时。

2.2.文本块

使用JEP 378,现在可以创建多行文本块,而无需在换行符处连接字符串:

String textBlock = """
Hello, this is a
multi-line
text block.
""";

2.3.切换表达式

Java 12 引入了switch 表达式( JEP 361 ),它(像所有表达式一样)评估单个值,并且可以在语句中使用。代替组合嵌套的if– else-operators ( ?::),我们现在可以使用switch– case-construct:

DayOfWeek day = DayOfWeek.FRIDAY;
int numOfLetters = switch (day) {
case MONDAY, FRIDAY, SUNDAY -> 6;
case TUESDAY -> 7;
case THURSDAY, SATURDAY -> 8;
case WEDNESDAY -> 9;
};

2.4.模式匹配

模式匹配在Amber 项目中得到了详细阐述,并在Java 语言中得到了体现。在Java 语言的情况下,它们可以帮助简化instanceof评估的代码。

我们可以直接将它们与instanceof一起使用:

if (obj instanceof String s) {
System.out.println(s.toLowerCase());
}

我们也可以在switch-case语句中使用它:

static double getDoubleUsingSwitch(Object o) {
return switch (o) {
case Integer i -> i.doubleValue();
case Float f -> f.doubleValue();
case String s -> Double.parseDouble(s);
default -> 0d;
};
}

2.5.密封类和接口

密封类可以通过指定允许的子类来限制继承:

public abstract sealed class Pet permits Dog, Cat {}

我们可以在Java 中的密封类和接口中找到更多详细信息。

3.雅加达EE 9

这个最重要的突破性变化可能是从Java EE 跳转到Jakarta EE9,其中包命名空间从javax.*更改为jakarta.*。因此,每当我们直接使用Java EE 中的类时,我们都需要调整代码中的所有导入。

例如,当我们在Spring MVC 控制器中访问HttpServletRequest对象时,我们需要替换:

import javax.servlet.http.HttpServletRequest;

和:

import jakarta.servlet.http.HttpServletRequest;

当然,我们不必经常使用Servlet API 的类型,但如果我们使用bean 验证和JPA,这是不可避免的。

当我们使用依赖于Java/Jakarta EE 的外部库时,我们应该注意(例如,我们必须使用Hibernate Validator 7+、Tomcat 10+ 和Jetty 11+)。

4. 进一步的依赖

Spring Framework 6 和Spring Boot 3 需要以下最低版本:

  • 科特林1.7+

  • Lombok 1.18.22+(JDK17支持

  • 摇篮7.3+

5.大点

两个总体主题受到了特别关注:Native ExecutablesObservability性。总体意味着:

  • Spring 框架引入了核心抽象

  • 投资组合项目始终与他们整合

  • Spring Boot 提供自动配置

5.1。本机可执行文件

构建本机可执行文件并将它们部署到GraalVM 具有更高的优先级。所以Spring Native 倡议正在进入Spring 本身

对于AOT 生成,不需要包含单独的插件,我们可以使用spring-boot-maven-plugin的 新目标

mvn spring-boot:aot-generate

Native Hints也将成为Spring 核心的一部分。Milestone 5 (v6.0.0-M5) 将提供为此的测试基础架构。

5.2.可观察性

Spring 6 引入了Spring Observability——一个基于Spring Cloud Sleuth的新项目。它更适合使用Micrometer有效地记录应用程序指标,并通过OpenZipkinOpenTelemetry等提供程序实现跟踪。

Spring Observability 得分优于以前基于代理的可观察性,因为它在本机编译的Spring 应用程序中无缝工作,以更有效地提供更好的信息。

6. Spring Web MVC 的小改动

最重要的新功能之一是对RFC7807(问题详细信息标准)的支持。不需要像Zalando Problem那样包含单独的库。

另一个较小的变化是HttpMethod不再是一个枚举,而是一个允许为扩展的HTTP 方法创建实例的类,例如由WebDAV 定义的那些:

HttpMethod lock = HttpMethod.valueOf("LOCK");

至少删除了一些过时的基于servlet 的集成,例如Commons FileUpload(我们应该使用StandardServletMultipartResolver进行多部分文件上传)、Tiles 和FreeMarker JSP 支持(我们应该使用FreeMarker 模板视图)。

7. 迁移项目

我们应该知道一些项目迁移的提示。推荐的步骤是:

  1. 迁移到Spring Boot 2.7(Spring Boot 3 发布时,会有基于Spring Boot 2.7 的迁移指南)

  2. 检查已弃用的代码使用情况和遗留的配置文件处理——它在新的主要版本中被删除

  3. 迁移到Java 17

  4. 检查第三方项目是否有Jakarta EE 9 兼容版本

  5. 由于Spring Boot 3 没有发布,我们可以尝试当前的里程碑来测试迁移

8. 结论

正如我们所见,迁移到Spring Boot 3 和Spring 6 也将迁移到Java 17 和Jakarta EE 9。如果我们非常重视可观察性和原生可执行文件,我们将从即将发布的主要版本中受益最多。


标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *