spring高级装配-处理自动装配的歧义性

it2022-06-24  91

@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){...} 创建自定义的限定符(略)

最新回复(0)