假设我有一个名为ProdModule的Guice模块,我想依赖于其他Guice模块,例如ProdDbModule和ProdPubSubModule。我该如何实现ProdModule的configure()方法呢?
您需要安装其他模块。
protected void configure(){
install(new ProdDbModule());
install(new ProdPubSubModule());
// etc.
}
install
非常方便,但只要在创建Injector
时提供所有必需的模块,就不需要install
其他模块:Injector injector = Guice.createInjector(new ProdDbModule(),
new ProdPubSubModule(), new ProdModule());
这样您就可以更灵活地更改入口点类中的任意一个模块,而无需修改ProdModule
本身。您还可以在模块中使用requireBinding
方法指示其需要其他模块提供哪些绑定。
您可以使用 Modules.combine
来创建一个包含所有其他模块的新模块。(请参见此链接)
不同之处:
install()
这样的紧密耦合模块的限制。Module
而不是一个注入器,这意味着您可以轻松地向注入器添加不同的模块。import com.google.inject.util.Modules;
Module module = Modules.combine(new ProdDbModule(),
new ProdPubSubModule(), new ProdModule());
Injector injector = Guice.createInjector(module);
Guice.createInjector(new ProdDbModule(), new ProdPubSubModule(), new ProdModule())
,有什么区别呢? - Óscar López