自举枪

时间:2015-05-31 17:24:36

标签: java guice

我有一个场景,我需要在开始时像注册一样注入一些对象,然后按需注入其他对象。我不知道的是,如果在我的控制台应用程序中,我只是打电话

Guice.createInjector(....)

在我的Main函数中然后当我需要另一个对象时,我需要的类型,我是否使用Provider再次注入同一个对象?我很难弄清楚在这种情况下使用Guice注射器的最佳方法是什么。提前谢谢。

1 个答案:

答案 0 :(得分:1)

一般情况下,是的:注意Provider以便稍后获取您的对象,并且不会在必要时直接抓住您的注射器。

理想情况下,您的引导程序应该就是:它应该实例化您的Injector并获得某种整个应用程序实例。这一点特别重要,因为Guice有助于测试,因此最大化Guice应用程序的一部分是一个好主意。

public class YourApplication {

  public static void main(String[] args) {
    // Only three lines exist outside the object graph.
    Injector injector = Guice.createInjector(new YourModule1(), new YourModule2());
    YourApplication app = injector.getInstance(YourApplication.class);
    app.run();
  }

  @Inject Provider<YourDep1> depProvider1;
  @Inject YourDep2 dep2;

  public void run() {
    // Here you have access to every @Inject field.
  }
}

在此,请记住,您创建的Injector仅保留在堆栈中。这是因为您从@Inject - 带注释的字段,方法和构造函数(包括Injector本身)获得了所需的一切。正如您所建议的那样,您可以使用Provider来获取所需数量的实例,如果该代码路径中不需要该对象,则包括零实例。