Spring 5中你需要知道的变化
Posted 小白懂编程
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring 5中你需要知道的变化相关的知识,希望对你有一定的参考价值。
最低Java支持版本为Java 8
为了充分利用 Java 8 特性,它的代码库已进行了改进,而且该框架要求将 Java 8 作为最低的 JDK 版本。
Spring 5 在类路径(和模块路径)上完全兼容 Java 9,而且它通过了 JDK 9 测试套件的测试。在 Java 9 发布后,Spring 能立即使用它。
HTTP/2 支持
Spring Framework 5.0 将提供专门的HTTP/2 特性支持,还支持人们期望出现在 JDK 9 中的新 HTTP 客户端。
反应式编程模型
Spring 5 最令人兴奋的新特性是它的反应式编程模型。Spring 5 Framework 基于一种反应式基础而构建,而且是完全异步和非阻塞的。只需少量的线程,新的事件循环执行模型就可以垂直扩展。
该框架采用反应式流来提供在反应式组件中传播负压的机制。负压是一个确保来自多个生产者的数据不会让使用者不堪重负的概念。
Spring WebFlux 是 Spring 5 的反应式核心,它为开发人员提供了两种为 Spring Web 编程而设计的编程模型:一种基于注解的模型和 Functional Web Framework (WebFlux.fn)。
基于注解的模型是 Spring WebMVC 的现代替代方案,该模型基于反应式基础而构建,而 Functional Web Framework 是基于 @Controller 注解的编程模型的替代方案。这些模型都通过同一种反应式基础来运行,后者调整非阻塞 HTTP 来适应反应式流 API。
使用 Lambda 表达式注册 bean
作为传统 XML 和 JavaConfig 的替代方案,现在可以使用 lambda 表达式注册 Spring bean。
GenericApplicationContext context = new GenericApplicationContext();
context.registerBean(Book.class, () -> new
Book(context.getBean(Author.class))
);
Spring WebMVC 支持最新的 API
全新的 WebFlux 模块提供了许多新的、令人兴奋的功能,但 Spring 5 也迎合了愿意继续使用 Spring MVC 的开发人员的需求。Spring 5 中更新了模型-视图-控制器框架,以兼容 WebFlux 和最新版的 Jackson 2.9 和 Protobuf 3.0,甚至包括对新的 Java EE 8 JSON-Binding API 的支持。
WebMVC 全面支持 Reactor 3.1 的 Flux
和 Mono
对象,以及 RxJava 1.3 和 2.1,它们被视为来自 MVC 控制器方法的返回值。
使用 JUnit 5 执行条件和并发测试
Spring 5 的测试套件通过多种方式得到了增强,但最明显的是它对 JUnit 5 的支持。现在可以在您的单元测试中利用 Java 8 中提供的函数式编程特性。
@Testpublic void givenStreamOfInts_SumShouldBeMoreThanFive() {
assertTrue(Stream.of(20, 40, 50)
.stream()
.mapToInt(i -> i)
.sum() > 110, () -> "Total should be more than 100");
}
Spring 5 继承了 JUnit 5在 Spring TestContext Framework 内实现多个扩展 API 的灵活性。举例而言,开发人员可以使用 JUnit 5 的条件测试执行注解 @EnabledIf
和 @DisabledIf
来自动计算一个 SpEL表达式,并适当地启用或禁用测试。借助这些注解,Spring 5 支持以前很难实现的复杂的条件测试方案。Spring TextContext Framework 现在能够并发执行测试。
包清理和弃用
Spring 5 中止了对一些过时 API 的支持。遭此厄运的还有 Hibernate 3 和 4,为了支持 Hibernate 5,它们遭到了弃用。另外,对 Portlet、Velocity、JasperReports、XMLBeans、JDO 和 Guava 的支持也已中止。
包级别上的清理工作仍在继续:Spring 5 不再支持 beans.factory.access
、jdbc.support.nativejdbc
、mock.staticmock
(来自 spring-aspects 模块)或 web.view.tiles2M
。Tiles 3 现在是 Spring 的最低要求。
对 Spring 核心和容器的一般更新
Spring Framework 5 改进了扫描和识别组件的方法,使大型项目的性能得到提升。目前,扫描是在编译时执行的,而且向 META-INF/spring.components 文件中的索引文件添加了组件坐标。该索引是通过一个为项目定义的特定于平台的应用程序构建任务来生成的。
标有来自 javax 包的注解的组件会添加到索引中,任何带 @Index
注解的类或接口都会添加到索引中。Spring 的传统类路径扫描方式没有删除,而是保留为一种后备选择。有许多针对大型代码库的明显性能优势,而托管许多 Spring 项目的服务器也会缩短启动时间。
Spring 5 还添加了对 @Nullable
的支持,后者可用于指示可选的注入点。使用者现在必须准备接受 null 值。此外,还可以使用此注解来标记可以为 null 的参数、字段和返回值。@Nullable
主要用于 IntelliJ IDEA 等 IDE,但也可用于 Eclipse 和 FindBugs,它使得在编译时处理 null 值变得更方便,而无需在运行时发送 NullPointerExceptions
。
Spring Logging 还提升了性能,自带开箱即用的 Commons Logging 桥接器。
Spring 5 的首要特性是新的反应式编程模型,这代表着对提供可无缝扩展、基于 Spring 的响应式服务的重大保障。随着人们对 Spring 5 的采用,开发人员有望看到反应式编程将会成为使用 Java 语言的 Web 和企业应用程序开发的未来发展道路。
知识改善生活!
自学及交流:
以上是关于Spring 5中你需要知道的变化的主要内容,如果未能解决你的问题,请参考以下文章