guice AbstractModule安装方法

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

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

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

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

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

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

有关重复数据删除绑定的更多信息,请参阅此存档博客或此SO答案 。