标签:qualifiers autowired annotations spring java
我正在尝试基本上使用spring文档中的示例http://docs.spring.io/spring/docs/3.2.0.RELEASE/spring-framework-reference/html/beans.html#beans-autowired-annotation-qualifiers来实现细粒度的@Autowired配置.
给定以下测试用例:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes=ExampleConfiguration.class)
public class ExampleTest {
@Autowired @ExampleQualifier(key="x")
private ExampleBean beanWithQualifierKeyX;
@Test
public void test() {
System.out.println(this.beanWithQualifierKeyX);
}
}
以及以下配置:
@Configuration
public class ExampleConfiguration {
@Bean
@ExampleQualifier(key = "x")
public ExampleBean exampleBean1() {
return new ExampleBean();
}
@Bean
@ExampleQualifier(key = "y")
public ExampleBean exampleBean2() {
return new ExampleBean();
}
@Bean
public ExampleBean exampleBean3() {
return new ExampleBean();
}
}
使用自定义限定符注释:
@Qualifier
@Retention(RetentionPolicy.RUNTIME)
public @interface ExampleQualifier {
String key();
}
我期望的是以下内容:应该使用配置类中的第一个bean自动装配属性beanWithQualifierKeyX.配置上的注释和属性上的注释都具有key =“ x”设置,因此这应该是唯一的匹配项.据我所知,这几乎与Spring示例文档中的MovieQualifier注释相同.
但是,当我执行测试时,出现以下错误:
org.springframework.beans.factory.BeanCreationException:
Could not autowire field: private xxx.ExampleBean xxx.ExampleTest.beanWithQualifierKeyX;
nested exception is
org.springframework.beans.factory.NoSuchBeanDefinitionException:
No unique bean of type [xxx.ExampleBean] is defined:
expected single matching bean but found 2: [exampleBean1, exampleBean2]
看起来Spring确实对注释执行了匹配(因为对exampleBean1和exampleBean2都进行了注释),但没有考虑注释键的值-否则x将是完美的匹配.
我在配置过程中错过了什么吗?为什么没有匹配项?
我正在使用的Spring版本是3.2.0.RELEASE
解决方法:
Spring 3.2.0 Autowiring with @Qualifier and @Qualifier meta annotation fails in Spring 3.2中存在/曾经存在错误(在3.2.1中已修复)
它的描述听起来完全像您的问题.
所以更新到3.2.1
标签:qualifiers,autowired,annotations,spring,java 来源: https://codeday.me/bug/20191030/1964345.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。