我正在开发一个应用程序,我使用Guice和Dropwizard。我正在尝试创建两个不同的Jersey客户端(具有不同的配置),以便我可以将它用于不同的目的。我正在尝试使用Guice的@Named Annotation。但是,它返回相同的对象,而不管@Named注释中指定的字符串。
以下是我的代码。 Module类看起来像这样:
public class AppModule extends AbstractModule {
@Provides
@Singleton
@Named ("clientA")
public Client providesClientA(Provider<AppConfiguration> appConfigProvider, Environment env) {
log.info("Inside provider of Client A");
JerseyClientConfiguration configuration = appConfigProvider.get().getJerseyClientConfigurationA();
configuration.setTimeout(Duration.seconds(10));
final Client client = new JerseyClientBuilder(environment).using(configuration).using(environment)
.build(environment.getName());
return client;
}
@Provides
@Singleton
@Named ("clientB")
public Client providesClientB(Provider<AppConfiguration> appConfigProvider, Environment env) {
log.info("Inside provider of Client B");
JerseyClientConfiguration configuration = appConfigProvider.get().getJerseyClientConfigurationB();
configuration.setTimeout(Duration.seconds(125));
final Client client = new JerseyClientBuilder(environment).using(configuration).using(environment)
.build(environment.getName());
return client;
}
}
注入这两个客户端的类如下所示:
public ClassApp {
private Client clientA;
private Client clientB;
@Inject
public ClassApp(@Named ("clientA") Client clientA,
@Named ("clientB") Client clientB) {
this.clientA = clientA;
this.clientB = clientB;
}
public void printClients() {
log.info("Client A is " + clientA);
log.info("Client B is " + clientB);
}
}
此处,它将打印&#34;客户A的内部提供商&#34;或&#34;客户B&#34;的内部提供商。而printClients()方法中clientA和clientB的值将是相同的。
如果有时会打印两者,即#34;客户A的内部提供商&#34;和&#34;客户B&#34;的内部提供者,然后它将抛出如下所述的IllegalArgumentException。
Error in custom provider, java.lang.IllegalArgumentException: A metric named org.apache.http.conn.HttpClientConnectionManager.AutomatedThresholdApplication.available-connections already exists
while locating javax.ws.rs.client.Client annotated with @com.google.inject.name.Named(value=clientA).
我尝试使用带有不同名称的String注释。无论注释如何,它也会提供相同的String。
我期待不同的客户使用&#34; clientA&#34;和&#34; clientB&#34;,但经过大量尝试并在互联网上搜索后,我认为这不是真的可以实现的。或者我在这里缺少什么?
针对此问题的任何指示或建议或解决方法都会有很大帮助。
感谢。