1. <em id="2qvri"><tr id="2qvri"></tr></em>
      1. 首頁»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投注技巧