gpt4 book ai didi

java - 使用Guice,如何提供同一类型的不同实例?

转载 作者:行者123 更新时间:2023-12-02 04:06:35 24 4
gpt4 key购买 nike

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

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

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)
}

最佳答案

您已经通过绑定(bind)注释 @A1@A2 区分了两个不同的 A。您只需要通过绑定(bind)注释来区分两个不同的 B,只需将您的注释添加到 providesB1providesB2 的注释列表中即可。

关于java - 使用Guice,如何提供同一类型的不同实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34229120/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com