【问题标题】:How to do some initialization after all dependencies injected?在注入所有依赖项后如何进行一些初始化?
【发布时间】:2020-08-14 06:01:14
【问题描述】:

是否可以在所有注入完成后但在服务启动之前在 Play Framework 中调用多个单例的某些方法?如何做得更好?

【问题讨论】:

  • 不确定播放框架,但使用 hk2,每个服务都有一个明确定义的生命周期,包括可选的 postConstruct 和 preDestroy 方法的可能性。 CDI也有同样的东西
  • 你应该可以使用 SPI 的某些部分(扩展)github.com/google/guice/wiki/InspectingModules

标签: dependency-injection playframework guice lifecycle


【解决方案1】:

我假设您将 Guice 用于dependency injection? 如果是这种情况,只需创建一个依赖于相关单例的单例对象并在其初始化程序中调用一个方法。

类似的东西:

  import javax.inject._


  @Singleton
  class ApplicationStart @Inject() (service1: Service1, service2: Service2, ...) {
       service1.initializeMethod()
       service2.otherInitMethod()
  }

然后确保这个对象被热切地初始化

import com.google.inject.AbstractModule

class StartModule extends AbstractModule {
  override def configure() = {
    bind(classOf[ApplicationStart]).asEagerSingleton()
  }
}

Guice 将确保在初始化 StartModule 之前构造 service1、service2。

【讨论】:

  • 是的,我正在使用 Guice 进行 DI。我有一个大型且非常动态的项目,其中包含开发团队定期添加和删除的数十个依赖项。我不想在某处保留依赖项的“列表”。一个理想的解决方案是像 injectionsDone 用于 Guice 或 preStart 用于 Play Framework。
猜你喜欢
  • 2011-04-19
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
  • 2013-07-27
  • 1970-01-01
  • 2013-07-08
  • 2021-05-15
  • 1970-01-01
相关资源
最近更新 更多