gpt4 book ai didi

java - 细粒度的 Spring Autowiring 不起作用(@Autowired 带有额外的自定义注释)

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:15:40 26 4
gpt4 key购买 nike

我正在尝试实现细粒度 @Autowired配置基本上使用 spring 文档中的示例:http://docs.spring.io/spring/docs/3.2.0.RELEASE/spring-framework-reference/html/beans.html#beans-autowired-annotation-qualifiers .

给定以下测试用例:

@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();

}

我期望的是以下内容:属性 beanWithQualifierKeyX应该使用配置类中的第一个 bean Autowiring 。配置上的注释和属性上的注释都有 key="x"设置所以这应该是唯一的匹配。据我所知,这几乎与 MovieQualifier 相同来自 Spring 示例文档的注释。

但是,当我执行测试时,出现以下错误:

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 确实对注释执行了匹配(因为 exampleBean1exampleBean2 都被注释了)但没有考虑 key 的值注释的 - 否则 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

关于java - 细粒度的 Spring Autowiring 不起作用(@Autowired 带有额外的自定义注释),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21116561/

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