最低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 中提供的函數式編程特性。
@Test
public 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 和企業應用程序開發的未來發展道路。
鏈接:https://www.jianshu.com/p/e9b6959b4869
來源:簡書
閱讀更多 java進階架構師 的文章