Playframework Play Framework 2.4全局对象迁移
我目前正在将Play Framework项目从2.3迁移到2.4。现在我需要迁移我的全局对象。以下是他们的迁移指南中的记录: GlobalSettings.beforeStart和GlobalSettings.onStart:启动时需要发生的任何事情现在都应该发生在依赖注入类的构造函数中。当依赖项注入框架加载类时,该类将执行其初始化。如果需要即时初始化(因为需要在应用程序实际启动之前执行某些代码),请定义即时绑定。 首先,我需要迁移Global.onStart代码。除此之外,它还使用akka订阅各种事件。下面是它通常的样子:Playframework Play Framework 2.4全局对象迁移,playframework,playframework-2.4,Playframework,Playframework 2.4,我目前正在将Play Framework项目从2.3迁移到2.4。现在我需要迁移我的全局对象。以下是他们的迁移指南中的记录: 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])
}
请注意导入语句。订阅方法需要它。由于这个简单的事实,我不能像migration doc中建议的那样为这个ApplicationGlobal类定义一个急切的绑定,因为这个应用程序还不存在。因此,我有几个问题:
我认为你必须这样考虑: 我的初始化代码是否需要在(几乎)一切发生之前全局发生?或者,特定组件是否需要它 启动时会发生一次的事情应该进入一个热切的单身状态。某个组件所需的东西将进入相应类的构造函数 其中每一项都有各自的后果:
- 全局初始化:常规绑定只会在需要实例时创建实现的实例,并在每次将它们注入某处时创建新实例。然而,无论是否有任何东西依赖于它们,都会在创建绑定时(或稍后)实例化渴望的单例。而且,只有一个实例。这就是全局初始化代码所需要的:在任何情况下运行,并且只运行一次。所以要回答你的第二个问题:不,你不需要在任何地方注射它
- 仅ceratin组件需要的任何其他内容都可以在相应类的构造函数中调用。不过,您需要知道该类的范围。如果您有只应运行一次的代码(例如addLifecycleHook),则该类必须是单例,否则每次创建该类的新实例时都会注册挂钩
应用程序
的实例,您也可以将其注入