@Autowired
public void setDessert(Dessert dessert){
...
}
Dessert为接口,有三个实现类,如下:
@Component
public class Cake implements Dessert {...}
@Component
public class Cookies implements Dessert{...}
@Component
public class IceCream implements Dessert{...}
上述代码中均使用了@Component,在组件扫描时,spring能够发现他们并将他们创建为Spring上下文中的bean,然后当spring试图自动装配setDessert中的Dessert时将会抛出NoUniqueBeanDefinitionException
- 标识首选的bean
@Component
@Primary
public class Cake implements Dessert {...}
或者
@Bean
@Primary
public Dessert cake(){
return new Cake();
}
对应的xml配置为
<bean id="cake" class="com.desserteater.Cake" primary="true"/>
如果多个bean都标注了primary那么sping也会抛出异常
- 限定自动装配的bean
@Autowired
@Qualifier("iceCream")
public void setDessert(Dessert dessert){...}
- 创建自定义的限定符(略)