SPRING IN ACTION 第4版笔记-第三章ADVANCING WIRING-004-消除bean自动装配的歧义@Primary
一、
假设有如下三个类实现同一个接口,则自动装配时会产生歧义
1 @Component 2 public class Cake implements Dessert { ... } 3 @Component 4 public class Cookies implements Dessert { ... } 5 @Component 6 public class IceCream implements Dessert { ... } 7 8 @Autowired 9 public void setDessert(Dessert dessert) { 10 this.dessert = dessert; 11 }
二、@Primary的3种用法
Let’s say that ice cream is your favorite dessert. You can express that favorite choice
in Spring using the @Primary annotation. @Primary can be used either alongside
@Component for beans that are component-scanned or alongside @Bean for beans
declared in Java configuration. For example, here’s how you might declare the
@Component -annotated IceCream bean as the primary choice:
1.在自动扫描
@Component @Primary public class IceCream implements Dessert { ... }
2.在java配置文件中
@Bean @Primary public Dessert iceCream() { return new IceCream(); }
3.xml配置文件
1 <bean id="iceCream" 2 class="com.desserteater.IceCream" 3 primary="true" />
如果有两个合适的bean都标记为@Primary,则Spring还是无法确定要装配哪个bean,这时要用@Qulifier来解决歧义
You can do anything you set your mind to, man!