与Guice一起使用时,AbstractModule类绑定的顺序是什么?

时间:2019-03-14 09:25:28

标签: scala guice

举个例子,这个问题可能更容易理解。

我正在使用Guice创建注射器:

  val injector = Guice.createInjector(new Module)

具有以下模块类:

class Module extends AbstractModule {

  override def configure(): Unit = {
    val instance = aCallToGetAnInstance()
    bind(classOf[DummyClass]).toInstance(instance)
    bind(classOf[DummyClass2]).asEagerSingleton()
  }

  @Provides
  @Singleton
  def provideDummyService: DummyService = {
    DummyService.standard.build()
  }

}

这3个绑定类中的哪个将首先绑定?

如果以下调用之一注入另一个类之一,那么这个问题似乎很有意义。

感谢您的回答。

2 个答案:

答案 0 :(得分:1)

这就是注入框架为您所做的。

只要您的代码中没有任何循环guice就可以解决该问题。

在启动时,所有绑定都经过验证(例如,如果您有循环,则会抱怨)。但是,实例化是在需要的时候(惰性)-例外是eager singleton

如果我误解了你,请发表评论。

答案 1 :(得分:0)

\R\h*(?=[+])方法上使用(nothing)@Provides就足够了。 Guice将找到带有@Singleton注释的方法,并为您完成接线。它使用Java Reflection执行此操作。无需在configure()方法中添加任何内容。

https://github.com/google/guice/wiki/ProvidesMethods