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+。
I really like that spring 5 is trying to catch up to the latest version of different technologies.
核心API增强
- 在包级别明确声明非空API。可空参数、字段和返回值都明确注解为
@Nullable
注解。 - 文件操作通过NIO 2流执行,即没有FileInput/Output流。对于基于文件的应用程序,这是一个巨大的增强和性能提升。
- 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 提供的
Filter
實現中完整支持 Servlet 3.1 簽名。 - 在 Spring MVC 控制器方法中支持 Servlet 4.0
PushBuilder
參數。 - 在常見的服務器上對 Servlet 3.0 多部分解析的 MaxUploadSizeExceededException。
- 通過 MediaTypeFactory 委託統一支持常見的媒體類型。
- 使用 Kotlin、Lombok、@ConstructorProperties 進行不可變對象的數據綁定。
- 作為 Jackson 和 GSON 的替代方案,支持 JSON Binding API。
- 從 Spring MVC 控制器方法中返回 Reactor 3.1 Flux 和 Mono,以及 RxJava 1.3 和 2.1 的支持。
- 將
ResponseStatusException
作為@ResponseStatus
的程序化替代方案。
Spring WebFlux
Spring WebFlux 是新的模块,它是对 spring-webmvc
模块的一种替代,基于响应式框架构建。该模块用于创建基于事件循环执行模型的完全异步和非阻塞应用程序。
- Spring 核心中的响应式基础设施,例如用于编码和解码对象流的编码器和解码器。
- @Controller 风格,基于注解的编程模型,类似于 Spring MVC,但在 WebFlux 中得到支持,运行在响应式堆栈上。
- 新的 WebClient 具有用于 HTTP 调用的函数式和响应式 API,类似于 RestTemplate,但通过流畅的 API 进行操作,同时在基于 WebFlux 基础设施的非阻塞和流式场景中表现出色。
支持 Kotlin 的函数式编程
Spring 5 现在还支持 Kotlin 编程。这是朝着支持函数式编程的重要一步,就像 Java 也在朝着函数式编程的方向发展一样。
- 支持 Null-Safe API
- 支持具有可选参数和默认值的 Kotlin 不可变类。
- 利用 Kotlin 的 reified 類型參數,在各種 API 中(如 RestTemplate 或 WebFlux API)避免明確指定要用於序列化/反序列化的類。
- 支持 Kotlin 自動連接構造函數,具有可選參數。
- Kotlin 空安全支持 @Autowired/@Inject 和 @RequestParam/@RequestHeader/等註釋。
測試改進
- 支持 JUnit 5
- 支持在 Spring TestContext Framework 中進行並行測試執行
已棄用支持和已刪除的套件
- 已從 spring-aspects 模塊中刪除套件 beans.factory.access、jdbc.support.nativejdbc、mock.staticmock。
- 已刪除套件 web.view.tiles2 和 orm.hibernate3/hibernate4。這意味著如果您計劃使用 Spring 5,您還必須使用 Hibernate 5。
- 放棄舊技術支援Portlet、Velocity、JasperReports、XMLBeans、JDO、Guava。如果您正在使用其中任何一種,請遷移到其他技術或保留在Spring 4中。
這就是Spring 5功能的快速概述。參考:Spring GitHub 文檔
Source:
https://www.digitalocean.com/community/tutorials/spring-5