§移除 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
的 Filter 类,并将它放在空包中。阅读 这里 以获取更多详细信息。
§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
发现此文档中的错误?此页面的源代码可以在 此处 找到。阅读完 文档指南 后,请随时贡献拉取请求。有疑问或建议要分享?前往 我们的社区论坛 与社区开始对话。