一个例子可能更容易理解这个问题。
我正在使用Guice
创建注入器:
val injector = Guice.createInjector(new Module)
使用以下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个绑定类中的哪一个?
如果以下调用之一注入另一个类中的一个,则此问题似乎有意义。
谢谢你的回答。
这就是Injection框架为您所做的事情。
只要你的代码中没有任何循环,guice
就可以解决它。
在启动时,所有绑定都会得到验证(例如,如果您有循环,则会抱怨)。然而,实例化是在需要时(懒惰) - 例外是eager singleton
。
如果我误解你,请评论。
在@Provides
方法上使用@Singleton
和provideDummyService
就足够了。 Guice会找到用@Provides
注释的方法并为你做接线。它使用Java Reflection完成此操作。无需在configure()方法中添加任何内容。