首頁»Java WEB»Spring Framework 5.0 新特性

Spring Framework 5.0 新特性

來源:oschina 發布時間:2017-07-08 閱讀次數:

  Spring Framework 5.0 是自 2013年12月版本 4 發布之后 Spring Framework 的第一個主發行版。Spring Framework 項目的領導人 Juergen Hoeller 于 2016 年 7 月 28 日宣布了第一個 Spring Framework 5.0 里程碑版本(5.0 M1)。

  現在,將近一年的時間過去以后,我們期盼已久的 RC3 版本將于 2017 年 7 月 18 日發行。這是路線圖規劃中 Spring Framework 5.0 首個 GA 發行版的最后一次發行。

  從高層來看,Spring Framework 5.0 的功能可以分為:

  • JDK 基線更新

  • 核心框架修正

  • 核心容器更新

  • 含 Kotlin 在內的函數式編程

  • 響應式編程模型

  • 測試改進

  • 庫支持

  • 中止支持

 Spring Framework 5.0 的 JDK 基線更新

  整個 Spring framework 5.0 代碼庫運行于 Java 8 之上。因此 Spring Framework 5.0 對環境的最低要就就是 Java 8。

  這一點實際上對框架而言非常重要。而作為開發者的我們而言,則已經能夠去藉此來享受到現代 Java 發行版中的所有新特性了。而框架版本還背負這支持已經不被建議使用的 Java 發行版的任務。

  現在,框架的最低要求是 Java 8.

  Spring Framework 5.0 原來是計劃在 Java 9 之上發行的。然后,在基于 Java 9 的發行版運作了超過 18 個月之后, Spring 團隊決定將 Spring Framework 5.0 發行版同 Java 9 的綁定關系解除。

  不過,在 Java 9 發布的時候(計劃是2017年9月份), Spring Framework 5.0 會準備好的。

 核心框架修訂

  核心的 Spring Framework 5.0 已經利用 Java 8 所引入的新特性進行了修訂。比較關鍵的一些如下:

  • 基于 Java 8 的反射增強,  Spring Framework 5.0 中的方法參數可以更加高效的進行訪問。

  • 核心的 Spring 接口現在提供基于Java 8 的默認方法構建的選擇性聲明。

  • 用 @Nullable 和 @NotNull 注解來顯示表明可為空的參數和以及返回值。這樣就夠在編譯的時候處理空值而不是在運行時拋出 NullPointerExceptions。

  在日志記錄方面, Spring Framework 5.0 帶來了 Commons Logging 橋接模塊的封裝, 它被叫做 spring-jcl 而不是標準的 Commons Logging。當然,無需任何額外的橋接,新版本也會對 Log4j 2.x, SLF4J, JUL ( java.util.logging) 進行自動檢測。

  有了 Resourse 抽象所提供的 isFile 指示器以及 getFile 方法,防御式編程方法也得到了框架的推動。

 核心容器更新

  Spring Framework 5.0 現在支持候選組件索引作為類路徑掃描的替代方案。該功能已經在類路徑掃描器中添加,以簡化添加候選組件標識的步驟。

  應用程序構建任務可以定義當前項目自己的 META-INF/spring.components 文件。在編譯時,源模型是自包含的,JPA 實體和 Spring 組件是已被標記的。

  從索引讀取實體而不是掃描類路徑對于小于 200 個類的小型項目是沒有明顯差異。但對大型項目影響較大。加載組件索引開銷更低。因此,隨著類數的增加,索引讀取的啟動時間將保持不變。

  加載組件索引的耗費是廉價的。因此當類的數量不斷增長,加上構建索引的啟動時間仍然可以維持一個常數, 不過對于組件掃描而言,啟動時間則會有明顯的增長。

  這個對于我們處于大型 Spring 項目的開發者所意味著的,是應用程序的啟動時間將被大大縮減。雖然 20 或者 30 秒鐘看似沒什么,但如果每天要這樣登上好幾百次,加起來就夠你受的了。使用了組件索引的話,就能幫助你每天過的更加高效。

  你可以在 Spring 的 Jira上了解更多關于組件索引的相關信息。

  @Nullable 注解現在也可以被用來作為可選注入項的指示器。@Nullable 為對象使用方規定了一項義務,就是它們必須準備以為取值為 null 的值。在此次發布之前,實現這件事情的唯一方法就是通過 Android 的 NullableChecker Framework 的 Nullable, 以及 JSR 305 的 Nullable

  發行說明中的其他一些新功能和增強功能包括:

  • 在 GenericApplicationContext 和 AnnotationConfigApplicationContext 中實現函數式編程風格。

  • 對接口方法的事務、緩存和異步注釋的一致性檢測。

  • 將 XML 配置命名空間簡化為無版本化的模式。

 使用 Kotlin 進行函數式編程

  Spring Framework 5.0 引入了對 JetBrains Kotlin 語言的支持。Kotlin 是一種支持函數式編程編程風格的面向對象語言。Kotlin 運行在 JVM 之上,但運行環境并不限于 JVM。

  有了對 Kotlin 的支持,開發者可以進行深度的函數式 Spring 編程,特別是在函數式 Web 端點以及 Bean 注冊這些方面。

  在 Spring Framework 5.0 中, 你可以為 WEB 的函數式 API 編寫干凈且地道的 Kotlin 代碼,就像下面這樣:

{
("/movie" and accept(TEXT_HTML)).nest {
GET("/", movieHandler::findAllView)
GET("/{card}", movieHandler::findOneView)
}
("/api/movie" and accept(APPLICATION_JSON)).nest {
GET("/", movieApiHandler::findAll)
GET("/{id}", movieApiHandler::findOne)
}
}

  對于 Bean 的注冊,作為 XML 或者 @Configuration 以及 @Bean 的替代辦法, 現在你可以使用 Kotlin 來注冊 Spring Bean了,就像下面這樣:

val context = GenericApplicationContext {
registerBean()
registerBean { Cinema(it.getBean()) }
}

  點擊這里了解我的新的 Spring Framework 5 課程的相關信息!

 響應式編程模型

  此次 Spring 發行版本的一個激動人心的特性就是新的響應式堆棧 WEB 框架。這個堆棧完全的響應式且非阻塞,適合于事件循環風格的處理,可以進行少量線程的擴展。

  Reactive Streams 是來自于 Netflix, Pivotal, Typesafe, Red Hat, Oracle, Twitter 以及 Spray.io 的工程師特地開發的一個 API。它為響應式編程實現的實現提供一個公共的 API,好實現 Hibernate 的 JPA。這里 JPA 就是這個 API, 而 Hibernate 就是實現。

  Reactive Streams API 是 Java 9 的官方版本的一部分。在 Java 8 中, 你會需要專門引入依賴來使用 Reactive Streams API。

  Spring Framework 5.0 對于流式處理的支持依賴于 Project Reactor 來構建, 其專門實現了 Reactive Streams API。

  Spring Framework 5.0 擁有一個新的 spring-webflux 模塊,支持響應式 HTTP 和 WebSocket 客戶端。Spring Framework 5.0 還提供了對于運行于服務器之上,包含了 REST, HTML, 以及 WebSocket 風格交互的響應式網頁應用程序的支持。

  在 spring-webflux 中包含了兩種獨立的服務端編程模型:

  • 基于注解:使用到了@Controller 以及 Spring MVC 的其它一些注解;

  • 使用 Java 8 lambda 表達式的函數式風格的路由和處理。

  有了 Spring Webflux, 你現在可以創建出 WebClient, 它是響應式且非阻塞的,可以作為 RestTemplate 的一個替代方案。

  這里有一個使用 Spring 5.0 的 REST 端點的 WebClient 實現:

WebClient webClient = WebClient.create();
Mono person = webClient.get()
.uri("http://localhost:8080/movie/42")
.accept(MediaType.APPLICATION_JSON)
.exchange()
.then(response -> response.bodyToMono(Movie.class));

  盡管新的 WebFlux 模塊給我么帶來了激動人心的新能力,傳統的 Spring MVC 在  Spring Framework 5.0 仍然得到了完整的支持。

 測試方面的提升

  Spring Framework 5.0 完全支持 JUnit 5 Jupiter,所以可以使用 JUnit 5 來編寫測試以及擴展。此外還提供了一個編程以及擴展模型,Jupiter 子項目提供了一個測試引擎來在 Spring 上運行基于 Jupiter 的測試。

  另外,Spring Framework 5 還提供了在 Spring TestContext Framework 中進行并行測試的擴展。

  針對響應式編程模型, spring-test 現在還引入了支持 Spring WebFlux 的 WebTestClient 集成測試的支持,類似于 MockMvc,并不需要一個運行著的服務端。使用一個模擬的請求或者響應, WebTestClient 就可以直接綁定到 WebFlux 服務端設施。

  你可以在這里找到這個激動人心的 TestContext 框架所帶來的增強功能的完整列表。

  當然, Spring Framework 5.0 仍然支持我們的老朋友 JUnit! 在我寫這篇文章的時候, JUnit 5 還只是發展到了 GA 版本。對于 JUnit4, Spring Framework 在未來還是要支持一段時間的。 

 庫支持

  Spring Framework 5.0目前支持以下升級庫的版本 :

 中止的支持

  在 API 層面,Spring Framework 5.0 不再支持以下包:

  • beans.factory.access 

  • jdbc.support.nativejdbc 

  • spring-aspects 模塊的 mock.staticmock

  • web.view.tiles2M.(最低要求 Tiles 3)

  • orm.hibernate3 和 orm.hibernate4. 目前 Hibernate 5 是支持的框架。

  Spring Framework 5.0 同時也停止了對以下庫的支持:

  • Portlet.

  • Velocity.

  • JasperReports.

  • XMLBeans.

  • JDO.

  • Guava.

  如果你正在使用任何上面的包,建議你將 Spring Framework 版本維持在 4.3.x。

 結語

  Spring Framework 5.0 的亮點絕對是響應式編程,這是一個重要的范式轉變。你可以將 Spring Framework 5.0 作為響應式程序的基礎版本。對于 2017 年及以后的剩余時間里,你可以期待看到子項目實現響應式特性。你將看到即將發布的 Spring Data、Spring Security、Spring Integration 等版本所提供的響應式編程功能。

  Spring Data 團隊已經為 MongoDB 和 Redis 實現了響應式支持。

  使用 JDBC 獲取響應式支持還為時過早。JDBC 規范本身就是阻塞的,在傳統的 JDBC 數據庫中看到響應式編程的還需要一段時間。

  雖然響應式編程是 Spring Framework 5.0 中的閃光點,但它不會在任何地方得到支持。 下游技術需要提供響應式支持。

  隨著響應式編程越來越受歡迎,我們可以期待越來越多的技術將實現響應式解決方案。 當然,我們可以期待 Spring 框架隨著其他的響應式編程方案的使用而發展。

  原文地址:https://dzone.com/articles/whats-new-in-spring-framework-5

QQ群:WEB開發者官方群(515171538),驗證消息:10000
微信群:加小編微信 849023636 邀請您加入,驗證消息:10000
提示:更多精彩內容關注微信公眾號:全棧開發者中心(fsder-com)
網友評論(共1條評論) 正在載入評論......
理智評論文明上網,拒絕惡意謾罵 發表評論 / 共1條評論
登錄會員中心
湖北快3今天的开奖结果