必须处理Guice,我想知道我应该如何处理模块方面的依赖关系.
在Guice中,每个模块都由一个实例提供.因此,如果我有一个需要某个服务的模块,它会创建一个模块,为该服务添加一个绑定并安装它(binder.install(module)).
现在我有两个独立的模块,完全可以独立使用,并且都安装相同的数据库模块.
独立使用这两个模块没有问题,但如果两个模块在同一个应用程序中使用会发生什么?数据库模块将由两个模块独立加载,但不能正确.
有没有办法询问活页夹是否某种类型已经绑定?我无法使用getProvider来检查它,因为所有返回的都是LookupProvider,无论是否已经绑定了什么.
那么如何处理这种情况呢?
更新:
它接缝Guice无法提供以下功能:
检查给定模块是否已加载.
检查给定的类是否已绑定.
使用配置中的提供程序可以执行分布式配置(模块能够配置要提供的对象).
Tavian Barne.. 13
Guice有两个功能来处理这种情况.第一个是模块重复数据删除.这意味着如果安装两个等效的模块(by equals()
和hashCode()
),则只configure()
运行一个方法.但是,这种解决方案有些脆弱,因为它无法在SPI转换中存活Modules.override()
,等等.
第二个和IMO更好的解决方案是绑定重复数据删除.这意味着Guice将接受完全重复的绑定.因此,如果你的模块没有bind(Interface.class).to(Implementation.class)
,它的configure()
方法运行两次甚至不重要,因为Guice将处理重复绑定就好了.
Guice有两个功能来处理这种情况.第一个是模块重复数据删除.这意味着如果安装两个等效的模块(by equals()
和hashCode()
),则只configure()
运行一个方法.但是,这种解决方案有些脆弱,因为它无法在SPI转换中存活Modules.override()
,等等.
第二个和IMO更好的解决方案是绑定重复数据删除.这意味着Guice将接受完全重复的绑定.因此,如果你的模块没有bind(Interface.class).to(Implementation.class)
,它的configure()
方法运行两次甚至不重要,因为Guice将处理重复绑定就好了.