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"/>
代碼中加載配置文件:
- <span style="font-size:18px;">ApplicationContextac= newClassPathXmlApplicationContext("applicationContext.xml");</span>
ApplicationContextac= newClassPathXmlApplicationContext("applicationContext.xml");
2)使用星號來匹配多個文件進行加載,文件名稱要符合規律。 (推薦使用)
- <span style="font-size:18px;"> //配置文件的名稱
- applicationContext.xml
- applicationContext-action.xml
- applicationContext-service.xml
- applicationContext-dao.xml
- ApplicationContextac =newClassPathXmlApplicationContext("applicationContext*.xml");
- </span>
//配置文件的名稱
applicationContext.xml
applicationContext-action.xml
applicationContext-service.xml
applicationContext-dao.xml
ApplicationContextac =newClassPathXmlApplicationContext("applicationContext*.xml");
3)可以使用數組作爲參數,一次性加載多個配置文件
- String[]files={"applicationContext.xml","applicationContext-test.xml"};
- ApplicationContextac = newClassPathXmlApplicationContext(files);
String[]files={"applicationContext.xml","applicationContext-test.xml"};
ApplicationContextac = newClassPathXmlApplicationContext(files);
注意:自動裝配功能和手動裝配要是同時使用,那麼自動裝配就不起作用。