Guice的AbstractModule的install方法

57
方法install()来自AbstractModule类,它是用来做什么的?有人能给我解释一下吗?从我在Guice网站上读到的文档中,我所得到的只有:

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

具体是配置哪些绑定呢?安装的模块的绑定还是调用安装方法的类的绑定?

1个回答

66

install可以进行组合:在它的configure方法中,FooModule可以安装FooServiceModule(例如)。这意味着仅基于FooModule创建的注入器将包括FooModule和FooServiceModule中的绑定和提供程序。

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

模块组合可能是一把双刃剑,因为不允许重复绑定:如果您的FooModule和BarModule都install了相同的依赖模块,并且这些绑定不是精确副本(例如如果模块在其configure方法中实例化对象),则Guice将无法创建安装FooModule和BarModule的任何注入器,因为存在重复绑定。您可以通过在模块上定义equalshashCode,或通过管理组合使任何模块都是顶级模块或仅安装在一个其他模块中(但永远不会同时存在)来解决此问题。

有关去除重复绑定的更多信息,请参见此归档博客此SO答案


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接