install()
课程中的方法AbstractModule
有什么作用?有人可以向我解释一下吗?从我从guice网站上读到的文档我得到的只有:
使用给定的模块配置更多绑定。
准确配置哪些绑定?来自已安装模块的绑定或调用install方法的类的绑定?
答案 0 :(得分:41)
install
允许组合:在其configure
方法中,FooModule可以安装FooServiceModule(例如)。这意味着仅基于FooModule创建的Injector将在FooModule和FooServiceModule中包含绑定和提供者。
您可能会看到install
用于将模块拆分为逻辑子模块以便于阅读或测试,或者用于高级模块以确保其依赖关系已配置。您也可以使用它来实例化具有不同构造函数参数的模块实例(例如,绑定多个数据存储),或者安装自动生成的模块实例,例如通过FactoryModuleBuilder创建的模块实例。
模块组合可能是一把双刃剑,因为不允许重复绑定:如果你的FooModule和BarModule都是install
相同的依赖模块,并且绑定不是exact duplicates(例如,如果是模块在其configure
方法中实例化对象),由于重复绑定,Guice将无法创建任何安装FooModule和BarModule的Injector。您可以通过在模块上定义equals
和hashCode
,或者通过管理您的组合来解决这个问题,以便任何模块都是顶层或安装在另一个模块中(但绝不会同时安装)。 / p>
有关重复数据删除绑定的详情,请参阅this archived blog或this SO answer。