【问题标题】:How to have a Guice module use another Guice module?如何让一个 Guice 模块使用另一个 Guice 模块?
【发布时间】:2011-10-30 23:54:36
【问题描述】:

假设我有一个 Guice 模块 ProdModule,我想依赖其他 GuiceModule、ProdDbModule 和 ProdPubSubModule。我将如何实现 ProdModule 的 configure()?

【问题讨论】:

    标签: java guice


    【解决方案1】:

    你会install你的其他模块

    protected void configure(){
        install(new ProdDbModule());
        install(new ProdPubSubModule());
        // etc.
    }
    

    【讨论】:

      【解决方案2】:

      虽然使用install 很方便,但您甚至不需要install 其他模块,只要您在创建Injector 时提供所有必要的模块即可:

      Injector injector = Guice.createInjector(new ProdDbModule(),
          new ProdPubSubModule(), new ProdModule());
      

      这可以让您更灵活地只更改入口点类中的这些模块之一,而无需修改 ProdModule 本身。您还可以使用requireBinding 方法在模块中指示它需要其他模块提供哪些绑定。

      【讨论】:

        【解决方案3】:

        您可以使用Modules.combine 创建一个包含所有其他模块的新模块。 (见this link

        区别:

        • 这不受像install()这样的紧密耦合模块的影响
        • 这会创建一个Module 而不是注入器,这意味着您可以轻松地向注入器添加不同的模块。

        代码

        import com.google.inject.util.Modules;
        Module module = Modules.combine(new ProdDbModule(),
          new ProdPubSubModule(), new ProdModule());
        Injector injector = Guice.createInjector(module);
        

        【讨论】:

        • 和 w.r.t 有什么区别?只需调用Guice.createInjector(new ProdDbModule(), new ProdPubSubModule(), new ProdModule())?
        • 什么都没有。如果您想在多个位置共享相同的模块列表,并且可能需要模块树而不是列表,则 combine 很有用。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多