§移除 GlobalSettings
如果您熱衷於使用依賴注入,我們建議您盡可能將程式碼移出 GlobalSettings
實作類別。理想情況下,您應該能夠重構程式碼,以便完全消除 GlobalSettings
類別。
以下是重構程式碼的方法指南。由於 Java 和 Scala 的 API 略有不同,請務必跳到適當的子部分。
注意:如果您尚未閱讀有關 Play 中的依賴注入,請務必現在就閱讀。追蹤適當的連結,以了解使用 Java 或 Scala 在 Play 中進行依賴注入。
§Scala
-
GlobalSettings.beforeStart
和GlobalSettings.onStart
:任何需要在啟動時執行的動作,現在都應該在依賴注入類別的建構函式中執行。當依賴注入架構載入類別時,類別將執行其初始化。如果您需要立即初始化(因為您需要在應用程式實際啟動之前執行一些程式碼),定義立即繫結。 -
GlobalSettings.onStop
:在需要註冊停止掛鉤的類別中,新增對ApplicationLifecycle
的依賴關係。然後,將GlobalSettings.onStop
方法的實作移到傳遞給ApplicationLifecycle.addStopHook
的Future
中。請閱讀 停止/清理 以取得更多資訊。 -
GlobalSettings.onError
:建立一個繼承自HttpErrorHandler
的類別,並將GlobalSettings.onError
的實作移到HttpErrorHandler.onServerError
方法中。請閱讀 錯誤處理 以取得更多資訊。 -
GlobalSettings.onRequestReceived
:建立一個繼承自HttpRequestHandler
的類別,並將GlobalSettings.onRequestReceived
的實作移到HttpRequestHandler.handlerForRequest
方法中。請閱讀 要求處理常式 以取得更多資訊。
請注意,如果您在GlobalSettings.onRequestReceived
實作中呼叫super.onRequestReceived
,則應該繼承自DefaultHttpRequestHandler
,而不是HttpRequestHandler
,並將所有呼叫super.onRequestReceived
的部分替換成super.handlerForRequest
。 -
GlobalSettings.onRouteRequest
:建立一個繼承自DefaultHttpRequestHandler
的類別,並將GlobalSettings.onRouteRequest
方法的實作移到DefaultHttpRequestHandler.routeRequest
方法中。請閱讀 要求處理常式 以取得更多資訊。 -
GlobalSettings.onRequestCompletion
:此方法已棄用,而且不再由 Play 呼叫。請改為建立自訂篩選器,將onDoneEnumerating
回呼附加到傳回的Enumerator
結果。請閱讀 Scala Http 篩選器,以取得如何建立 http 篩選器的詳細資料。 -
GlobalSettings.onHandlerNotFound
:建立繼承自HttpErrorHandler
的類別,並提供HttpErrorHandler.onClientError
的實作。請閱讀 錯誤處理,以取得更多資訊。
請注意,HttpErrorHandler.onClientError
會在引數中取得statusCode
,因此您的實作應簡化為
if(statusCode == play.api.http.Status.NOT_FOUND) {
// move your implementation of `GlobalSettings.onHandlerNotFound` here
}
GlobalSettings.onBadRequest
:建立繼承自HttpErrorHandler
的類別,並提供HttpErrorHandler.onClientError
的實作。請閱讀 錯誤處理,以取得更多資訊。
請注意,HttpErrorHandler.onClientError
會在引數中取得statusCode
,因此您的實作應簡化為
if(statusCode == play.api.http.Status.BAD_REQUEST) {
// move your implementation of `GlobalSettings.onBadRequest` here
}
-
GlobalSettings.configure
和GlobalSettings.onLoadConfig
:在您的設定檔中指定所有設定,或建立自己的 ApplicationLoader(請參閱 GuiceApplicationBuilder.loadConfig)。 -
GlobalSettings.doFilter
:建立繼承自HttpFilters
的類別,並提供HttpFilter.filters
的實作。請閱讀 Http 篩選器,以取得更多資訊。
此外,請注意,如果您的 Global
類別混合了 WithFilters
特質,您現在應建立一個繼承自 HttpFilters
的篩選器類別,並將其置於空套件中。請閱讀 這裡,以取得更多詳細資料。
§Java
-
GlobalSettings.beforeStart
和GlobalSettings.onStart
:任何需要在啟動時執行的動作,現在都應在相依性注入類別的建構函式中執行。當相依性注入架構載入類別時,類別會執行其初始化。如果您需要熱切初始化(例如,因為您需要在應用程式實際啟動之前執行一些程式碼),請 定義熱切繫結。 -
GlobalSettings.onStop
:在需要註冊停止掛鉤的類別中新增對ApplicationLifecycle
的依賴關係。然後,將GlobalSettings.onStop
方法的實作移至傳遞給ApplicationLifecycle.addStopHook
的Promise
內部。請閱讀 停止/清理 以取得更多資訊。 -
GlobalSettings.onError
:建立一個繼承自HttpErrorHandler
的類別,並將GlobalSettings.onError
的實作移至HttpErrorHandler.onServerError
方法內部。請閱讀 錯誤處理 以取得更多資訊。 -
GlobalSettings.onRequest
:建立一個繼承自DefaultHttpRequestHandler
的類別,並將GlobalSettings.onRequest
方法的實作移至DefaultHttpRequestHandler.createAction
方法內部。請閱讀 要求處理常式 以取得更多資訊。 -
GlobalSettings.onRouteRequest
:使用 Java API 時,此方法沒有簡單的遷移方式。如果您需要這個方法,您必須保留您的 Global 類別一段時間。 -
GlobalSettings.onHandlerNotFound
:建立一個繼承自HttpErrorHandler
的類別,並提供HttpErrorHandler.onClientError
的實作。請閱讀 錯誤處理 以取得更多資訊。
請注意,HttpErrorHandler.onClientError
會在引數中取得statusCode
,因此您的實作應簡化為
if(statusCode == play.mvc.Http.Status.NOT_FOUND) {
// move your implementation of `GlobalSettings.onHandlerNotFound` here
}
GlobalSettings.onBadRequest
:建立一個繼承自HttpErrorHandler
的類別,並提供HttpErrorHandler.onClientError
的實作。請閱讀 錯誤處理 以取得更多資訊。
請注意,HttpErrorHandler.onClientError
會在引數中取得statusCode
,因此您的實作應簡化為
if(statusCode == play.mvc.Http.Status.BAD_REQUEST) {
// move your implementation of `GlobalSettings.onBadRequest` here
}
-
GlobalSettings.onLoadConfig
:在組態檔中指定所有組態,或建立您自己的 ApplicationLoader(請參閱 GuiceApplicationBuilder.loadConfig)。 -
GlobalSettings.filters
:建立繼承自HttpFilters
的類別,並提供HttpFilter.filters
的實作。請閱讀 HTTP 篩選器 以取得更多資訊。
下一頁:Anorm 遷移
在這個文件中發現錯誤?此頁面的原始碼可以在 這裡 找到。在閱讀 文件指南 後,請隨時貢獻一個 pull request。有問題或建議要分享?請到 我們的社群論壇 與社群展開對話。