一般來說在spring框架中利用@Autowired和@resource來進行實體bean的注入,但是同時也可以利用@Qualifier(“value”)來進行注入我們可以觀察下面代碼:
//定義亞洲人
@Qualifier("Asian")
@Component
public class AsianMan extends Person {
}
········
//定義歐洲人
@Qualifier("Europe")
@Component
public class EuropeMan extends Person {
}
在引用的時候:
public class Controller {
@Qualifier("Asian") //指定注入的是Asain的bean
@Autowired
private Person person;
}
可以利用@Qualifier(“value”)中的值來進行一個書寫,來確定注入的bean元素。
具體的使用的原因:
-
bean已有id,爲什麼還用@Qualifier?
上面的例子,我們可以把兩個bean的id分別設爲“Asian“、”Europe“,然後用@Resource(name="***")也同樣能實現相關功能,那爲什麼還要用@Qualifier?個人理解@Qualifier是個修飾詞,不需要bean_id不可重複那麼嚴格,比較靈活。那麼就可以把其中的參數作爲一種修飾,作爲bean的形容詞來進行更細緻的描述。在《Spring實戰》書中,舉例是類IceCream(冰淇淋)和Dessert(甜點)都用@Qualifier(”cold“)來修飾,意思是涼的冰淇淋和甜點。 因此使用@Qualifier,更加靈活,也更符合面向對象的思想。
-
@Qualifier加在註解上
上面的例子中,可以看到是使用@Qualifier()中value的參數來篩選bean的,本文給此參數起個名字,叫做修飾語。修飾語是字符串類型,可以設置各種值。如果一個工程的修飾語種類特別多,或者修飾語語義之間有繼承等類似複雜關係,或者需要用多個修飾語修飾同一個bean,那用這種直接的方式就不太好操作了。修飾語value字符串容易拼錯,容易混淆,更不容易被編輯器檢測出來,調試bug困難。 因此可以自定義一個新的註解,使用@Qualifier修飾,製作自己的修飾語註解