如何让Guice模块使用另一个Guice模块?

时间:2011-08-19 23:09:35

标签: java guice

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

3 个答案:

答案 0 :(得分:39)

你会install你的其他模块

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

答案 1 :(得分:22)

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

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

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

答案 2 :(得分:5)

您可以使用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);