编程语言
首页 > 编程语言> > java-细粒度的Spring自动装配不起作用(@Autowired,带有附加的自定义注释)

java-细粒度的Spring自动装配不起作用(@Autowired,带有附加的自定义注释)

作者:互联网

我正在尝试基本上使用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