Spring使用註解的方式配置bean的屬性-bean之間的引用關係
前邊我們講過了使用註解的方式來為類建立一個bean的例項,使其被SpringIOC容器管理。即先使用註解標註在類上,然後使用<context:component-san>標籤指定Spring掃描的包及其子包的類。下邊我們來講一講如何使用註解的方式來為bean的屬性賦值,即如何使用註解的方式指定bean之間的關聯關係。
<context:component-scan>這個配置在IOC配置檔案中的標籤,除了可以指定要掃描的元件之外呢,它還有一個很重要的功能,就是會自動註冊一個AutowiredAnnotationBeanPostPorcessor後置處理器的例項,這個後置處理器可以自動的裝配具有@Autowired/@Resource/@Inject的屬性----即將存在於IOC容器中的bean的例項於相同屬性型別的變數裝配起來,即劃等號。
在這三種註解中,@Autowired註解是最常見的註解。其實他們三個註解的功能都是一樣的,我們常用@Autowired,所以我們著重來講一講它。
1. 功能
@Autowired的功能是:可以自動裝配具有相容型別的單個bean的屬性。即被@Autowired註解標註的屬性,Spring會自動的從當前IOC容器中尋找匹配的屬性型別,然後將其賦值給這個屬性。
2. 使用範圍
@Autowired註解可以寫在屬性上、構造方法上、一切具有引數的方法上(如setter方法)。
3. 特性
預設情況下,所有被@Autowired註解標註的屬性,都必須在IOC容器中可以找到對應的屬性型別的bean,
④ 衝突
當IOC容器中存在多個與被@Autowired註解的屬性(介面)的型別相同的bean(介面的實現類),那麼Spring會去找預設的非限定類名去匹配屬性(這個非限定類名可以使用value屬性設定),如果不存在這個首字母小寫的非限定類名,也可以在set方法中的形參前加上@Qualify(beanName)來指定這個形參中屬性對應的bean的名稱、
⑤ 作用於陣列、集合、Map
當@Autowired註解定義在陣列型別的屬性上時,Spring會將所有和陣列型別匹配的bean都裝配到這個陣列中
當@Autowired註解定義在集合型別的屬性上時,Spring會檢查集合的型別,然後將IOC中所有滿足這個型別bean都裝配到這個集合中
當@Autowired註解定義在Map型別的屬性上時,Spring會檢查Map的值的型別,然後將所有滿足條件的bean以beanName-bean的形式放到這個Map屬性中