spring架構學習(四)自動裝配
set注入和構造注入有時在做配置時比較麻煩。是以架構為了提高開發效率,提供自動裝配功能,簡化配置。Spring架構式預設不支援自動裝配的,要想使用自動裝配需要修改spring配置檔案中<bean>标簽的autowire屬性
自動裝配屬性有6個值可選,分别代表不同的含義。
1,byName
從Spring環境中擷取目标對象時,目标對象中的屬性會根據名稱在整個Spring環境中查找<bean>标簽的id屬性值。如果有相同的,那麼擷取這個對象,實作關聯。
整個Spring環境:表示所有的spring配置檔案中查找,那麼id不能有重複的。
2,byType
從Spring環境中擷取目标對象時,目标對象中的屬性會根據類型在整個spring環境中查找<bean>标簽的class屬性值。如果有相同的,那麼擷取這個對象,實作關聯。
缺點:如果存在多個相同類型的bean對象,會出錯。
如果屬性為單一類型的資料,那麼查找到多個關聯對象會發生錯誤。
如果屬性為數組或集合(泛型)類型,那麼查找到多個關聯對象不會發生異常。
3,constructor
使用構造方法完成對象注入,其實也是根據構造方法的參數類型進行對象查找,相當于采用byType的方式。
4,autodetect
自動選擇:如果對象沒有無參數的構造方法,那麼自動選擇constructor的自動裝配方式進行構造注入。如果對象含有無參數的構造方法,那麼自動選擇byType的自動裝配方式進行setter注入。
5,no
不支援自動裝配功能
6,default
表示預設采用上一級标簽的自動裝配的取值。如果存在多個配置檔案的話,那麼每一個配置檔案的自動裝配方式都是獨立的。
如果配置檔案存在多個的情況下,加載配置檔案的方式:
1)可以指定總的配置檔案去包含子的配置檔案,然後隻加載總的配置檔案即可在總的配置檔案applicationContext.xml中使用import标簽進行子檔案包<importresource="applicationContext-test.xml"/>
代碼中加載配置檔案:
[html] view plain copy print ?
- <span style="font-size:18px;">ApplicationContextac= newClassPathXmlApplicationContext("applicationContext.xml");</span>
2)使用星号來比對多個檔案進行加載,檔案名稱要符合規律。 (推薦使用)
[html] view plain copy print ?
- <span style="font-size:18px;"> //配置檔案的名稱
- applicationContext.xml
- applicationContext-action.xml
- applicationContext-service.xml
- applicationContext-dao.xml
- ApplicationContextac =newClassPathXmlApplicationContext("applicationContext*.xml");
- </span>
3)可以使用數組作為參數,一次性加載多個配置檔案
[html] view plain copy print ?
- String[]files={"applicationContext.xml","applicationContext-test.xml"};
- ApplicationContextac = newClassPathXmlApplicationContext(files);
注意:自動裝配功能和手動裝配要是同時使用,那麼自動裝配就不起作用。