【发布时间】:2013-02-12 19:09:51
【问题描述】:
我正在学习 Guice,但我不清楚如何使用 Injector 实例。最好在应用程序引导时创建一次Injector 实例,并将其设为公共单例?
我们是否总是必须使用Injector#getInstance(SomeClass.class) 来获取我们放置Guice 的@Inject 注释的类?
【问题讨论】:
-
最好不要使用
Injector.getInstance()。 -
@millimoose 但是还有什么其他方法可以检索 Guice 管理的类?
-
用
@Inject注释的字段应该有“自动”可用的正确类。 (假设您也让 Guice 管理需要注入的类。)这个想法是让容器管理您的依赖项,和使用它们的类,并且只从其中获取一个“主”类手动注入器以启动您的应用程序。您还应该考虑rereading the tutorial,这是依赖注入 101。 -
是的,我在提问之前阅读了它,但是必须使用
Injector#getInstance(MyClass.class)检索具有带有@Inject注释的字段的类。那么,如果我有多个字段用@Inject注释的类怎么办?我需要使用Injector#getInstance(ClassName.class)开始每一堂课。 -
啊。不必要。仅当您需要从非 Guice 管理的类中调用一个方法时。或者,您可以改为使用
Injector.injectMembers(this)并填充来自Injector的所有带有@Inject注释的字段,即使在非托管对象上也是如此。