在我們使用@Autowired時,如果我們注入的Bean隻有一個,那麼自動裝配會找到我們定義的那個Bean裝配進去,如果我們定義了多個時,通過@Autowired裝配時就會抛出異常,舉個例子:
我們根據接口注入了一個Bean:
@Autowired
private Dessert dessert;
而我們聲明了多個Bean:
@Component
public class Cookies implements Dessert{...}
@Component
public class Cake implements Dessert{...}
@Component
public class IceCream implements Dessert{...}
執行時會抛出異常:
No unique bean of type [Dessert] is defined: expected single matching bean but found : [cookies, cake, iceCream]
這個時候,@Qualifier注解就登場了。
@Autowired
@Qualifier("iceCream")
private Dessert dessert;
指定我們注入的Bean的Id是iceCream,完美的避免了這個錯誤。
對我們開發人員來說,為了避免這個問題,我們需要另外一個注解@Primary,選擇我們的一個Bean作為首選注入的Bean,這樣即使我沒有通過@Qualifier,我們也可以輸入這個首選的Bean,避免我們的項目無法啟動等問題。