Java 使用Guice,如何提供相同类型的不同实例?

Java 使用Guice,如何提供相同类型的不同实例?,java,dependency-injection,guice,Java,Dependency Injection,Guice,我有类型A和B。我想绑定两个类型A的实例,并提供两个类型B的实例——基于类型A的实例创建类型B的实例 我尝试在下面执行此操作,但调用providesB2()会导致此异常: A binding to javax.sql.DataSource was already configured at ...providesB1() 我想解决这个问题的一个简单方法不是提供两个类型B的实例,而是让我的提供程序方法返回类型C和D,这两个类型都扩展了B。但是,在提供两个类型B的实例时,有没有办法做到这一点呢 @

我有类型A和B。我想绑定两个类型A的实例,并提供两个类型B的实例——基于类型A的实例创建类型B的实例

我尝试在下面执行此操作,但调用providesB2()会导致此异常:

A binding to javax.sql.DataSource was already configured at ...providesB1()
我想解决这个问题的一个简单方法不是提供两个类型B的实例,而是让我的提供程序方法返回类型C和D,这两个类型都扩展了B。但是,在提供两个类型B的实例时,有没有办法做到这一点呢

@BindingAnnotation
@Retention(RetentionPolicy.RUNTIME)
@interface A1 {}

@BindingAnnotation
@Retention(RetentionPolicy.RUNTIME)
@interface A2 {}

//....

(A.class).annotatedWith(A1.class).toInstance(aInstance1);
(A.class).annotatedWith(A2.class).toInstance(aInstance2);

@Provides
@Singleton
@Inject
B providesB1(@A1 a) {
  return new B(a)
}

@Provides
@Singleton
@Inject
B providesB2(@A2 a) {
  return new B(a)
}

您已经通过绑定注释
@A1
@A2
区分了两个不同的A。您只需将您的注释添加到
providesB1
providesB2
的注释列表中,就可以区分具有绑定注释的两个不同的B,在发布之前我尝试过,但它给出了一个例外。但经过进一步检查,例外情况是由于另一个(相关)问题。现在可以了,谢谢。