天天看點

Spring進階裝配之指定Bean

在我們使用@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,避免我們的項目無法啟動等問題。