有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java引导Guice注入器

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

Guice.createInjector(....)

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


共 (1) 个答案

  1. # 1 楼答案

    一般来说,是的:注入一个Provider以便稍后获取对象,并且不要在必要的时候直接抓住注入器

    理想情况下,您的引导应该是这样的:它应该实例化您的注入器,并获得某种类型的整个应用程序实例。这一点尤其重要,因为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.
      }
    }
    

    这里,请记住,您创建的喷油器仅保留在堆栈上。这是因为您可以从@Inject注释的字段、方法和构造函数中获得所需的一切,包括注入器本身。正如您所建议的,您可以使用Provider来获取所需的任意多个实例,如果该代码路径中不需要对象,则包括零个实例