当找到多个匹配的bean时,Spring是如何命名的?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (45)

假设我有这样的接口:

interface Country {}
class USA implements Country {}
class UK implements Country ()

下面是配置XML的片段:

<bean class="USA"/>
<bean id="country" class="UK"/>
<bean id="main" class="Main"/>

如何控制下面哪个依赖项是自动处理的?

class Main {
    private Country country;
    @Autowired
    public void setCountry(Country country) {
        this.country = country;
    }
}

我正在使用Spring3.0.3。

提问于
用户回答回答于

这被记录在第3.9.3款Spring3.0手册:

对于回退匹配,bean名称被视为默认限定符值。

换句话说,默认的行为就相当于你已经添加了@Qualifier("country")到setter方法。

用户回答回答于

带有限定符的基于微调注释的自动装配

由于按类型自动排列可能会导致多个候情况,因此往往需要对甄选过程有更多的控制。实现这一目标的一种方法是使用Spring的@限定符注释。这允许将限定符值与特定的参数关联,缩小类型匹配的集合,以便为每个参数选择特定的bean。在最简单的情况下,这可以是一个简单的描述值:

class Main {
    private Country country;
    @Autowired
    @Qualifier("country")
    public void setCountry(Country country) {
        this.country = country;
    }
}

扫码关注云+社区

领取腾讯云代金券