guice AbstractModule安装方法

时间:2014-01-30 02:24:20

标签: java guice

install()课程中的方法AbstractModule有什么作用?有人可以向我解释一下吗?从我从guice网站上读到的文档我得到的只有:

  

使用给定的模块配置更多绑定。

准确配置哪些绑定?来自已安装模块的绑定或调用install方法的类的绑定?

1 个答案:

答案 0 :(得分:41)

install允许组合:在其configure方法中,FooModule可以安装FooServiceModule(例如)。这意味着仅基于FooModule创建的Injector将在FooModule和FooServiceModule中包含绑定和提供者。

您可能会看到install用于将模块拆分为逻辑子模块以便于阅读或测试,或者用于高级模块以确保其依赖关系已配置。您也可以使用它来实例化具有不同构造函数参数的模块实例(例如,绑定多个数据存储),或者安装自动生成的模块实例,例如通过FactoryModuleBuilder创建的模块实例。

模块组合可能是一把双刃剑,因为不允许重复绑定:如果你的FooModule和BarModule都是install相同的依赖模块,并且绑定不是exact duplicates(例如,如果是模块在其configure方法中实例化对象),由于重复绑定,Guice将无法创建任何安装FooModule和BarModule的Injector。您可以通过在模块上定义equalshashCode,或者通过管理您的组合来解决这个问题,以便任何模块都是顶层或安装在另一个模块中(但绝不会同时安装)。 / p>

有关重复数据删除绑定的详情,请参阅this archived blogthis SO answer