You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 06:25:00