brm*_*rmd 6 java spring hibernate spring-boot citrus-framework
我在互联网和堆栈溢出上进行了搜索,但似乎无法找到解决我的问题的方法:
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
Run Code Online (Sandbox Code Playgroud)
概述一些背景信息:我必须使用 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();
}
}
Run Code Online (Sandbox Code Playgroud)
我试着像这样注入我的 Bean,
public class AuthenticationIT {
@Autowired
@Qualifier("server1BasicAuthClient")
@CitrusEndpoint
private HttpClient server1BasicAuthClient;
@Autowired
@Qualifier("server2BasicAuthClient")
@CitrusEndpoint
private HttpClient server2BasicAuthClient;
....
}
Run Code Online (Sandbox Code Playgroud)
任何想法在哪里以及如何解决问题?
提前致谢。
如果您打算通过名称表达注释驱动的注入,则不要主要使用 @Autowired,即使在技术上能够通过 @Qualifier 值引用 bean 名称。相反,请使用 JSR-250 @Resource 注释,该注释在语义上定义为通过其唯一名称来标识特定目标组件,声明的类型与匹配过程无关。
由于这种语义差异的具体结果,本身定义为集合或映射类型的 bean 无法通过 @Autowired 注入,因为类型匹配不适用于它们。对此类 bean 使用 @Resource,通过唯一名称引用特定的集合或映射 bean。
@Autowired 适用于字段、构造函数和多参数方法,允许通过参数级别的限定符注释来缩小范围。相比之下,@Resource 仅支持具有单个参数的字段和 bean 属性 setter 方法。因此,如果您的注入目标是构造函数或多参数方法,请坚持使用限定符。
尝试设置 usingvalue
而不是name
OR 使用 @Primary
@Bean(value="server1BasicAuthClient")
@Bean(value="server2BasicAuthClient")
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
12635 次 |
最近记录: |