【问题标题】:Bootstrapping Guice injector自举Guice注入器
【发布时间】:2015-05-31 17:24:36
【问题描述】:

我有一个场景,我需要在开始时注入一些对象,例如日志记录,然后按需注入其他对象。我不知道是否在我的控制台应用程序中,我只是调用:

Guice.createInjector(....)

在我的 Main 函数中,然后当我需要另一个对象时,我需要按需类型,我是否使用 Provider 再次注入相同的对象?我很难找出在这种情况下使用 Guice 的注射器的最佳方法。

【问题讨论】:

    标签: java guice


    【解决方案1】:

    一般来说,是的:注入 Provider 以便稍后获取您的对象,并且不要在必要时直接持有您的 Injector。

    理想情况下,您的引导程序应该是这样的:它应该实例化您的 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-annotated 字段、方法和构造函数中获得所需的一切,包括 Injector 本身。正如您所建议的,您可以使用 Provider 来获取所需数量的实例,如果该代码路径中不需要该对象,则包括零个实例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-10
      • 2013-01-26
      • 1970-01-01
      • 2012-02-01
      • 1970-01-01
      • 2017-05-28
      相关资源
      最近更新 更多