1、Spring进行自动装配时碰到的bean歧义性问题。
在进行自动装配时,只有仅有一个bean匹配所需结果时,才是可行的。
如果不仅仅一个bean能够匹配结果,例如一个接口有多个实现,这种歧义性会阻碍Spring自动装配属性、构造器参数或者方法参数。
(虽然在实际中,这种歧义性问题很罕见,通常所需的接口只有一个实现类。)
2、Spring提供的解决方案
A. 将可选bean中的某一个设为首选(primary)的bean;
B. 使用限定符,使得Spring可选的bean减少为一个(only one)。
3、solution A---使用@Primary
Spring注解:
@Component
@Primary
public class IceCream implements Dessert{...}
JavaConfig:
@Bean
@Primary
public Dessert iceCream(){
return new IceCream();
}
XML中:
<bean id="iceCream" class="xxx.xxx.IceCream" primary="true" />
4、solution B---限定符@Qualifier("要注入的bean的ID")
//最简单的用法
@AutoWired
@Qualifier("iceCream")
public void setDessert(Dessert dessert){
this.dessert=dessert;
}
5、创建自定义的限定符(略了…知道有这个功能就行)