如何在Guice模块中注入共享依赖Oven以避免重复声明?
在Guice模块中复用共享依赖(避免@Provides方法重复声明参数)
Guice本身支持直接在模块类中注入成员变量,不用在每个@Provides方法里重复声明共享依赖,具体实现如下:
正确实现代码
public class PizzasModule extends AbstractModule { // 直接在模块成员变量上用@Inject注入Oven,Guice会自动处理 @Inject private Oven oven; private Pizza bakePizzaInOven(Topping topping) { return oven.bakePizza(topping); } @Provides Pizza provideMushroomPizza(Mushrooms mushrooms) { return bakePizzaInOven(mushrooms); } @Provides Pizza provideOlivePizza(Olives olives) { return bakePizzaInOven(olives); } @Provides Pizza provideTomatoPizza(Tomatoes tomatoes) { return bakePizzaInOven(tomatoes); } }
关键说明
- 模块类需要继承
AbstractModule(Guice模块的标准写法),Guice初始化模块时会自动注入带有@Inject注解的成员变量。 - 如果有多个共享依赖,比如同时需要
Oven和PizzaSauce,直接在模块里添加多个@Inject注解的成员变量即可,无需修改每个@Provides方法的参数列表。 - 即使成员变量是
private修饰,Guice默认也支持私有字段注入;若遇到注入失败,检查模块是否正确注册到Injector,或确认Oven已被其他模块完成绑定。
与辅助Provider方案对比
你提到的封装Pizzeria辅助类的方式可行,但Guice内置的模块成员注入是更轻量的解决方案——无需额外创建辅助类,直接在模块内部复用共享依赖,尤其适合共享依赖较多的场景。
内容的提问来源于stack exchange,提问作者eshalev
相关产品推荐
相关产品推荐

