Spring 5.0是在2013年釋出Spring 4後的第一個大版本,5.0 M1在2016年7月28日釋出。隨著慢慢的推廣,使用它的人數肯定也會越來越多,那麼Spring 5有哪些新的特性呢?一起來看下吧
基本可以歸為如下幾類:
- JDK版本升級
- Core框架修訂,核心容器更新
- Kotlin函數語言程式設計
- 響應式程式設計模型
- 測試改進
- 額外庫支援
- 停止維護一些特性
JDK版本升級
Spring 5的程式碼基於Java 8的語法規範,因此要想使用Spring 5,JDK的版本至少要在8.0以上。最開始的時候Spring 5.0想使用Java 9,但是Java 9釋出的時間比Spring 慢了18個月,然後Spring開發團隊決定從Spring 5.0中去除Java 9的依賴。
Core框架修訂
基於Java8的反射增強,方法的引數再Spring5中可以高效的被訪問
核心的Spring介面提供了利用了Java 8的預設介面實現,default方法,提供了一些可選的宣告
@Nullable和@NotNull註解精確的標記了方法的引數和返回值,這樣可以在編譯的時候處理null值,而不至於在執行的時候丟擲空指標異常,NullPointerExceptions。
在日誌端,Spring 5.0提供了Common Logging的橋接模組,spring-jcl,代替了標準的Common Logging,同時它還可以自動的檢測Log4J2.x,SLF4J,JUL(java.util.logging),而不需要額外的依賴。
Kotlin函數語言程式設計
Spring 5.0引入了JetBrains的Kotlin語言支援,Kotlin是一種支援函數語言程式設計的物件導向程式語言。Kotlin也執行在JVM之上,有了Kotlin的支援,開發者可以使用Spring的函數語言程式設計處理Web的入口點和Bean的註冊。
比如你可以寫成如下的程式碼風格。
在web的入口點的時候:
{
("/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的時候:
val context = GenericApplicationContext {
registerBean()
registerBean { Cinema(it.getBean()) }
}
複製程式碼
響應式程式設計模型
激動人心的Spring 5.0特性就是它的響應式Web程式設計
Reactive Streams(響應式流)是NetFlix ,Pivotal, Typesafe, Red Hat, Oracle, Twitter, 和 Spray.io共同開發的一套規範。它提供了一些通用的API, 實現的話可以自己控制,就像Hibernate之JPA,JPA是api,Hibernate是實現。
響應式流是Java9的正式模組,但是在Java8中,我們需要引入額外的依賴。Spring5.0的流式支援基於響應式流的API的Project Reactor
Spring 5.0有個新的模組叫做spring-webflux,可以支援響應式的Http和WebSocket客戶端。
通過Spring Webflux,你可以建立Webclient,它是響應式和非阻塞的RestTemplate的替代。如下是程式碼示範:
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));
複製程式碼
測試改進
Spring 5.0完全支援Junit 5,在TestContext框架中,可以並行的執行測試。對於響應式的程式設計,Spring-test提供了WebTestClient來測試spring-webflux。WebTestClient,就像MockMvc不需要執行的伺服器。
當然Spring 5.0還是支援Junit 4的,在未來的一段時間裡Junit 4是都會存在的。
額外庫支援
Spring 5.0現在支援下面的庫版本:
- JackSon 2.6+
- EhCache 2.10+ / 3.0 GA
- Hibernate 5.0+
- JDBC 4.0+
- XmlUnit 2.x+
- OkHttp 3.x+
- Netty 4.1+
停止維護的一些特性
在Api層面上,Spring5.0不在支援下面的包了:
- beans.factory.access
- jdbc.support.nativejdbc
- spring-aspects模組的mock.staticmock
- web.view.tiles2M. 現在Tiles 3是最低要求的版本
- orm.hibernate3和orm.hibernate4.現在支援Hibernate5
不再支援如下庫:
- Portlet
- Velocity
- JasperReports
- XMLBeans
- JDO
- Guava
如果你在當前的專案中使用到了上面提到的這些庫,那麼最好不要升級到Spring5的版本
小結
響應式程式設計已經變得越來越流行,我們會看到越來越多的技術實現響應式的方案,對響應式程式設計感興趣的可以多做更多的瞭解。