我目前正在将Play Framework项目从2.3迁移到2.4。现在我需要迁移我的Global对象。以下是他们的迁移指南中的记录:
GlobalSettings.beforeStart和GlobalSettings.onStart:启动时需要发生的任何事情现在都应该发生在依赖注入类的构造函数中。当依赖注入框架加载它时,类将执行其初始化。如果您需要急切初始化(因为您需要在实际启动应用程序之前执行某些代码),请定义一个急切的绑定。
首先,我需要迁移我的Global.onStart代码。除其他外,它使用akka订阅各种事件。通常是这样的:
import play.api.Play.current
class ApplicationGlobal @Inject()(@Named("event-handler") eventHandlerActor: ActorRef) {
system.eventStream.subscribe(eventHandlerActor, classOf[SomeEvent])
}
请注意导入语句。它是 subscribe 方法所必需的。由于这个简单的事实,我不能像迁移文档中所建议的那样为这个 ApplicationGlobal 类定义一个急切的绑定,因为应用程序还不存在。因此,我有几个问题:
据我所知,定义急切绑定实际上意味着定义 beforeStart 方法的模拟,因为代码在应用程序启动之前执行。这是对的吗?
如果它是正确的,那么 onStart 方法的模拟是什么?根据文档,此代码现在应该发生在依赖注入类的构造函数中。但是我应该在哪里注入 ApplicationGlobal 类呢?进入Controller类?但我喜欢其中10个用于不同的功能。我应该把它注入所有这些吗?
答案 0 :(得分:0)
我认为你必须这样思考:
我的初始化代码是否需要在全局(几乎所有)之前全局发生?或者,是否需要特定组件?
在启动时应该发生的事情应该进入一个热切紧张的单身人士。某个组件所需的东西应该进入相应类的构造函数。
他们每个人都有各自的后果:
因此,基本上guice将创建整个应用程序的依赖关系图,然后启动第一个线程。其他一切都来自于此。如果你的某些代码需要一个Application
的实例,你也可以注入它。