Java guice注入器使用的最佳实践

Java guice注入器使用的最佳实践,java,dependency-injection,guice,Java,Dependency Injection,Guice,从Guice文档: public static void main(String[] args) { /* * Guice.createInjector() takes your Modules, and returns a new Injector * instance. Most applications will call this method exactly once, in their * main() method. */

从Guice文档:

 public static void main(String[] args) {
    /*
     * Guice.createInjector() takes your Modules, and returns a new Injector
     * instance. Most applications will call this method exactly once, in their
     * main() method.
     */
    Injector injector = Guice.createInjector(new BillingModule());

    /*
     * Now that we've got the injector, we can build objects.
     */
    BillingService billingService = injector.getInstance(BillingService.class);
    ...
  }
所以,在所有这些解决方法之后,如果我需要将BillingService的实例从主类中取出,我需要保持injector变量上的链接才能这样做

我的意思是,在另一节课上,我需要做这样的事情:

BillingService billingService = MainClass.injector.getInstance(BillingService.class)

获取BillingService的实例?这对我来说并不优雅,还有其他方法吗?

这就是模块存在的原因

只需在
createInjector(…)
方法中添加几个模块

如果通过模块引用了其他类,则只需编写以下内容:

class PaymentService {
  @Inject BillingService billingService;
}
我要做的是使用一个“应用程序”类启动一切,就像你有你的
main
方法一样,就在Guice配置的类中。

“在其他类中”你需要这样做,但是如果你能从
injector
获取其他类的实例,您的另一个类可以将其dep表示为
@Inject
字段或
@Inject
构造函数参数。这使得Olivier的回答正确:除非您或您的框架在依赖项注入器之外创建对象,否则您不需要显式地保留或访问注入器。