文件

§Play 2.4 的新功能

此頁面重點介紹 Play 2.4 的新功能。如果您想了解移轉到 Play 2.4 所需的變更,請查看 Play 2.4 移轉指南

§相依性注入

Play 現在支援開箱即用的相依性注入。

§動機

Play 的長期策略是移除 Play 對全域狀態的相依性。Play 目前會將對目前應用程式的參考儲存在靜態變數中,然後在程式碼庫的許多地方使用這個變數。移除此變數具有下列優點

移除 Play 的全域狀態是一個龐大的任務,需要對 Play 應用程式的撰寫方式進行一些破壞性的變更。我們採取的方法是在維持向後相容性的同時,在 Play 2.4 中盡可能執行此項任務。一段時間內,Play 的許多 API 將同時支援依賴全域狀態和不依賴全域狀態的方法,讓您能夠逐步將應用程式移轉至不依賴全域狀態,而不是在升級到 Play 2.4 時一次執行所有移轉。

移除全域狀態的第一步是讓 Play 元件的相依性由元件提供,而不是靜態查詢。這表示提供相依性注入的現成支援。

§方法

在 Java 生態系統中,相依性注入的方法通常在 JSR 330 中達成共識,但正確的實作備受爭論,有許多現有的競爭實作,例如 Guice、Spring 和 JEE 本身。

在 Scala 生態系統中,相依性注入的方法並未達成共識,有許多競爭的編譯時間和執行時間相依性注入方法。

Play 在提供相依性注入解決方案時的哲學是不對我們允許的方法發表意見,但對我們記錄和現成提供的做法發表意見。因此,我們提供了下列內容

您可以在 JavaScala 中進一步瞭解 Play 的依賴注入支援。

§測試

將依賴注入引入 Play 的最大優點之一是,現在可以更輕鬆地測試 Play 的許多部分。Play 現在提供許多 API 來協助模擬和覆寫元件,以及能夠在與 Play 應用程式其他部分隔離的情況下測試與 Play 元件的互動。

您可以在這裡閱讀有關這些新 API 的資訊

§嵌入 Play

現在可以輕鬆地嵌入 Play 應用程式。Play 2.4 提供了啟動和停止 Play 伺服器的 API,以及 Java 和 Scala 的路由 DSL,以便可以將路由直接嵌入程式碼中。

在 Java 中,請參閱 嵌入 Play 以及有關 路由 DSL 的資訊。

在 Scala 中,請參閱 嵌入 Play 以及有關 字串內插路由 DSL 的資訊。

§彙總反向路由器

Play 現在支援將多個子專案的反向路由器彙整到單一共用專案中,而不依賴路由檔案的來源專案。這讓模組化 Play 應用程式可以使用 Play 反向路由器作為模組之間的 API,讓它們可以彼此呈現 URL,而不用相互依賴。這也表示可以從 Play 專案中萃取出一個免依賴的反向路由器,並發布供呼叫專案提供的 API 的外部專案使用。

有關如何設定此功能的詳細資訊,請參閱 彙整反向路由器

§Java 8 支援

Play 2.4 現在需要 JDK 8。因此,Play 能夠立即提供對 Java 8 資料類型的支援。例如,Play 的 JSON API 現在支援 Java 8 時間類型,包括 InstanceLocalDateTimeLocalDate

Play 文件現在顯示使用 Java 8 語法撰寫的匿名內部類別程式碼範例。以下為部分程式碼範例的變更方式:

變更前

return promise(new Function0<Integer>() {
  public Integer apply() {
    return longComputation();
  }
 }).map(new Function<Integer,Result>() {
  public Result apply(Integer i) {
    return ok("Got " + i);
  }
});

變更後

return promise(() -> longComputation())
  .map((Integer i) -> ok("Got " + i));

§Maven/sbt 標準配置

Play 現在讓您可以使用其預設配置或 Maven 和 sbt 專案的預設目錄配置。請參閱 Play 應用程式的解剖 頁面,以取得更多詳細資訊。

§Anorm

Anorm 已萃取出一個具有自己生命週期的獨立專案,讓 anorm 能夠以自己的步調進行,不受 Play 約束。anorm 專案可以在 此處 找到。

anorm 中的新功能包括

§Ebean

Play 的 Ebean 支援已萃取出一個獨立專案,擁有自己的生命週期,讓 Ebean 支援可以按照自己的步調進行,不受 Play 限制。play-ebean 專案可在此處找到 here

play-ebean 現在支援 Ebean 4.x。

§HikariCP

HikariCP 現在是預設的 JDBC 連線池。其屬性可以使用 .conf 檔案直接設定,您應該將設定屬性重新命名為 HikariCP 所預期的名稱。

§WS

WS 現在在 HTTPS 中支援伺服器名稱指示(SNI)—這解決了許多基於 HTTPS 的 CDN(例如 Cloudflare)的問題,這些 CDN 嚴重依賴 SNI。

§實驗性功能

Play 提供兩個新的實驗性功能。這些功能標示為實驗性功能,因為它們的 API 尚未定稿,且可能在不同版本間變更。這些 API 不保證二進位相容性。

§Akka HTTP 支援

Play 支援新的 Akka HTTP 後端,作為目前 Netty 後端的替代方案。有關如何使用它的說明,請參閱 Akka HTTP 伺服器

§Reactive Streams 支援

Play 提供 Reactive Streams 的基於迭代器的實作,讓其他 Reactive Streams 實作(例如 Akka Streams 或 RxJava)能夠與 Play 的迭代器 IO API 搭配使用。有關更多資訊,請參閱 Reactive Streams 整合

下一步:移轉指南


在這個文件找到錯誤?此頁面的原始程式碼可以在 這裡 找到。在閱讀 文件指南 後,請隨時提交拉取請求。有問題或建議要分享?前往 我們的社群論壇 與社群開始對話。