使用Guice注入具有不同参数的相同类

时间:2017-12-02 03:34:50

标签: java dependency-injection guice

我有两个不同的类(Cart和Payment)尝试使用相同的数据库访问器类DBAccessor,因为DBAccessor只包含以固定格式从DB读取和写入数据的逻辑。

public class Cart{
    @Inject
    Cart(@Cart DBService db){
    }
..
}

public class Payment{
    @Inject
    Payment(@Payment DBService db){
    }
..
}

public class CartDBService implements DBService{
    @Inject
    public CartDBService(DBAccessor){
    }
}
public class PaymentDBService implements DBService{
    @Inject
    public PaymentDBService(DBAccessor){
    }
}
public class DBAccessor{
    @Inject
    public DBAccessor(String tableName){
    }
}

我想在给定设置中使用guice注入依赖项,确保一切都是由guice创建的。

我正在使用绑定注释为Cart和Payment注入不同的DBService实例。

bind(DBService.class).annotatedWith(Cart.class).to(CartDBService.class);
bind(DBService.class).annotatedWith(Payment.class).to(PaymentDBService.class);

如何为购物车和订单注入单独的DBAccessor类,以确保它们注入正确的表名。

2 个答案:

答案 0 :(得分:0)

问题在于设计:课程DBAccessor做了太多工作,因为它从不同的表中读取不同类型的数据,现在Guice通过向您展示您是一个坏男孩来拯救您...

解决方案:实现两个DBAccessor类,如果它们具有通用逻辑,则可以将其提取到接口中的默认方法或抽象类并从中继承。然后,您将要求Guice为构造函数提供不同的

答案 1 :(得分:0)

您需要两次绑定DbAccessor课程,并为每个表格使用不同的qualifier annotation。然后你的每个类都可以注入他们需要的合适的绑定。