Spring 5
Spring 5 于 2017 年底发布。Spring 5 为 Spring 框架带来了重大更新。Spring 4 于 2013 年发布,因此每个人都期待该框架进行重大改版。我很高兴看到 Spring 框架中的新功能。
Spring 5 功能
Spring 5 的特性大致可以分为以下几类:
- Java 基线支持
- 核心 API 增强功能
- Spring Web MVC 增强功能
- Spring WebFlux
- 支持 Kotlin 的函数式编程
- 测试改进
- 已弃用的支持和已删除的软件包
Java 基线支持
- Spring 5 运行在 Java 8 上,因此 spring 代码可以利用 lambda 表达式来提高代码的可读性。
- Spring 5 也支持 java 9,因此我们也可以在基于模块的架构上创建应用程序。
- Spring 5 支持Java EE 7,并且兼容Java EE 8。因此,我们可以在应用程序中使用Servlet 4.0、Bean Validation 2.0、JPA 2.2 。我们还可以使用它们的旧版本,即Servlet 3.1、Bean Validation 1.1、JPA 2.1。
- Spring 5 应用程序首选的服务器版本是 Tomcat 8.5+、Jetty 9.4+ 和 WildFly 10+。
我非常喜欢 Spring 5 正在尝试赶上不同技术的最新版本。
核心 API 增强功能
- 包级别的非空 API 声明。可空参数、字段和返回值都用注解明确标注
@Nullable
。 - 文件操作通过 NIO 2 流执行,即没有文件输入/输出流。这对于基于文件的应用程序来说是一项巨大的增强和性能提升。
- Spring Framework 5.0 带有自己的 Commons Logging 桥;
spring-jcl
而不是标准 Commons Logging。 - 支持通过索引文件“META-INF/spring.components”而不是类路径扫描来提供 Spring 组件信息。如果您有一个大型 Spring 项目和许多 Spring 组件,这将大大缩短启动时间。这对开发人员来说也更好,因为我们可以直接查看指定的文件来找出应用程序入口点,而不是搜索整个类路径文件。
Spring Web MVC 增强功能
Spring MVC 模块在使用最新 Java EE 技术方面进行了重大改进。一些主要的增强功能包括:
- Spring 提供的实现中完全支持 Servlet 3.1 签名
Filter
。 PushBuilder
Spring MVC 控制器方法中支持 Servlet 4.0参数。- 普通服务器上 Servlet 3.0 多部分解析时出现 MaxUploadSizeExceededException。
- 通过MediaTypeFactory委托统一支持常见的媒体类型。
- 使用Kotlin、Lombok、@ConstructorProperties与不可变对象进行数据绑定。
- 支持JSON Binding API,作为 Jackson 和 GSON 的替代。
- 支持 Reactor 3.1 Flux和Mono以及 RxJava 1.3 和 2.1 作为 Spring MVC 控制器方法的返回值。
- 支持
ResponseStatusException
作为的程序替代方案@ResponseStatus
。
Spring WebFlux
Spring WebFlux 是新模块,它是spring-webmvc
模块的替代品,基于反应式框架构建。该模块用于创建基于事件循环执行模型的完全异步和非阻塞应用程序。
- spring-core 中的反应式基础设施,例如用于对对象流进行编码和解码的编码器和解码器。
- @Controller样式,基于注释的编程模型,类似于 Spring MVC,但在 WebFlux 中受支持,在反应堆栈上运行。
- 新的 WebClient 具有用于 HTTP 调用的功能性和反应性 API,与 RestTemplate 相当,但通过流畅的 API,并且在基于 WebFlux 基础架构的非阻塞和流式传输场景中表现出色。
支持 Kotlin 的函数式编程
Spring 5 现在还支持 Kotlin 编程。这是朝着支持函数式编程迈出的一大步,就像 Java 也在向函数式编程迈进一样。
- 支持 Null-Safe API
- 支持具有可选参数和默认值的 Kotlin 不可变类。
- 利用 Kotlin 具体化类型参数来避免在各种 API(如 RestTemplate 或 WebFlux API)中明确指定用于序列化/反序列化的类。
- 支持具有可选参数的 Kotlin 自动装配构造函数。
- Kotlin 对@Autowired / @Inject和@RequestParam / @RequestHeader /etc 注释的空安全支持。
测试改进
- 支持 JUnit 5
- 支持 Spring TestContext 框架中的并行测试执行
已弃用的支持和已删除的软件包
- 从模块中删除了包
beans.factory.access
、jdbc.support.nativejdbc
。mock.staticmock
spring-aspects
- 删除包
web.view.tiles2
并orm.hibernate3/hibernate4
丢弃。这意味着如果您计划使用 Spring 5,您还必须使用 Hibernate 5。 - 不再支持旧技术Portlet、Velocity、JasperReports、XMLBeans、JDO、Guava。如果您正在使用其中任何一种,那么请迁移到其他技术或继续使用 Spring 4。
以上就是对 Spring 5 功能的快速概述。参考:Spring GitHub Doc