gpt4 book ai didi

java - 没有符合条件的 bean,预期是单个匹配的 bean,但找到了 2 个

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:06:02 25 4
gpt4 key购买 nike

我在互联网和 overlow 堆栈上都进行了搜索,但似乎无法找到解决我的问题的方法:

Unable to find bean reference for type 'class com.consol.citrus.http.client.HttpClient'Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'com.consol.citrus.http.client.HttpClient' available: expected single matching bean but found 2: server1BasicAuthClient,server2BasicAuthClient

概述一些背景信息:我必须使用 Spring 5 和 Citrus Framework 制作一个小型应用程序来自动化我们的集成测试。

我定义为遵循我的 Beans:

@Configuration 
public class EndpointAuthentication {

public String server1Host;

public int server1Port;

public String server2Host;

public int server2Port;

@Bean(name="server1BasicAuthClient")
public com.consol.citrus.http.client.HttpClient server1BasicAuthClient() throws Exception {
return CitrusEndpoints.http()
.client()
.requestUrl(String.format("http://%s:%s/", server1Host, server1Port))
.requestFactory(sslRequestFactory(server1Host,server1Port))
.build();
}

@Bean(name="server2BasicAuthClient")
public com.consol.citrus.http.client.HttpClient server2BasicAuthClient() throws Exception {
return CitrusEndpoints.http()
.client()
.requestUrl(String.format("http://%s:%s/", server2Host, server2Port))
.requestFactory(sslRequestFactory(server2Host,server2Port))
.build();
}
}

然后我尝试像这样注入(inject)我的 Bean,

public class AuthenticationIT {

@Autowired
@Qualifier("server1BasicAuthClient")
@CitrusEndpoint
private HttpClient server1BasicAuthClient;

@Autowired
@Qualifier("server2BasicAuthClient")
@CitrusEndpoint
private HttpClient server2BasicAuthClient;
....
}

关于在哪里以及如何解决问题的任何想法?

提前致谢。

最佳答案

如果您打算通过名称表达注释驱动的注入(inject),请不要主要使用@Autowired,即使在技术上能够通过@Qualifier 值引用bean 名称。相反,使用 JSR-250 @Resource 注释,它在语义上定义为通过其唯一名称标识特定目标组件,声明的类型与匹配过程无关。

作为这种语义差异的一个特定结果,本身定义为集合或映射类型的 beans 不能通过 @Autowired 注入(inject),因为类型匹配不适用于它们。对此类 bean 使用 @Resource,通过唯一名称引用特定集合或映射 bean。

@Autowired 适用于字段、构造函数和多参数方法,允许通过参数级别的限定符注释缩小范围。相比之下,@Resource 仅支持字段和具有单个参数的 bean 属性设置方法。因此,如果您的注入(inject)目标是构造函数或多参数方法,请坚持使用限定符。


尝试使用 value 代替 name 或使用 @Primary

@Bean(value="server1BasicAuthClient")
@Bean(value="server2BasicAuthClient")

Refer 1 Refer 2

关于java - 没有符合条件的 bean,预期是单个匹配的 bean,但找到了 2 个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55182705/

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