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

3

通过一个例子来解释这个问题可能更容易理解。

我正在使用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
可能正在使用一个注入框架。是哪一个? - undefined
是的,guice,我更新了问题,谢谢你的反馈 ;) - undefined
2个回答

4
这就是Injection框架为您做的事情。
只要您的代码中没有任何循环,Guice就可以解决它。
在启动时验证所有绑定(例如,如果存在循环,它会发出警告)。然而,实例化是必要时才进行的(惰性) - 例外是急切的单例。
如果我误解了您的意思,请评论说明。

嗨 @pme,谢谢你的回答。所以,每个类的实例都是惰性绑定的吗? - undefined
我调整了我的答案。 - undefined
大多数循环问题可以通过使用接口-实现抽象来解决。 - undefined

0
拥有@Provides@Singleton注解在provideDummyService方法上就足够了。Guice会找到使用@Provides注解的方法,并为您进行连接。它使用Java反射来实现这一点。不需要在configure()方法中添加任何内容。

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


哦,我看到你更新了问题。关于“哪个会先绑定”,我的理解是:1)实例(DummyClass),2)DummyClass2,3)DummyService。这样做的原因是因为3将成为一个延迟提供者,2将成为一个急切的单例(并且它将在那里创建),而1)首先被调用。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接