1. 程式人生 > >Spring-自動裝配

Spring-自動裝配

1.通過xml配置檔案中的autowire來實現spring的自動裝配,目的是為了簡化Spring的配置

1.自動裝配的幾種方式:

1.ByName:通過我們注入的Bean物件中設定的autowire="ByName",得到Bean物件中的需要的依賴物件的屬性的名稱(也就是set方法的屬性名稱,也就是說所依賴物件的屬性必   須有setter方法),然後查詢所依賴的物件是否被Spring容器建立,如果已經建立,則會把我們所依賴的物件自動注入進來,如果沒有建立,則不會注入

<bean id="studentDAO" class="com.ioc.demo.StudentDAO"></
bean>
<bean id="student" class="com.ioc.demo.Student" autowire="byName"></bean>

2.如果我們一個Bean物件要依賴多個物件,這個時候我們在使用ByName會非常麻煩,所以Spring為我們提供了一種配置全域性自動裝配都使用ByName方式

http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd" default-autowire="byName">

3.ByType:通過我們注入的Bean物件中設定的autowire="ByType",找到我們所依賴物件的setter方法裡面的引數型別,根據引數型別去Spring容器中查詢Bean物件,如果已經建立,則會把我們所依賴的物件自動注入進來,如果沒有建立,則不會注入

  4.在使用BytType方式裝配時,被依賴的Bean物件可以忽略id,但是不允許有兩個相同型別的Bean物件,否則會報錯

  5.no:表示不設定裝配方式

6.constructor:使用有參構造器來裝配,當我們使用構造器來例項化物件的時候,推薦使用ByType方式來裝配

  1.No:即不啟用自動裝配。Autowire預設的值。預設情況下,需要通過"ref"來裝配bean,

2.byName:按名稱裝配? 可以根據屬性的名稱在容器中查詢與該屬性名稱相同的bean,如果沒有找到,則屬性值為null
3.byType:按型別裝配? 可以根據屬性型別,在容器中尋找該型別匹配的bean,如有多個,則會丟擲UnsatisfiedDependencyException異常,如果沒有找到,則屬性值為null。
4.constructor:與byType方式相似,不同之處在與它應用於構造器引數,如果在容器中沒有找到與構造器引數型別一致的bean,那麼將丟擲異常。(根據建構函式引數的資料型別,進行byType模式的自動裝配。)
5.autodetect:通過bean類的自省機制(introspection)來決定是使用constructor還是byType的方式進行自動裝配。如果Bean有空構造器那麼將採用“byType”自動裝配方式,否則使用“constructor”自動裝配方式。
6.default:由上級標籤<beans>的default-autowire屬性確定。

7.注意:在配置bean時,<bean>標籤中Autowire屬性的優先順序比其上級標籤高,即是說,如果在上級標籤中定義default-autowire屬性為byName,而在<bean>中定義為byType時,Spring IoC容器會優先使用<bean>標籤的配置。

8.我們不推薦使用自動裝配,推薦使用annotation(註解)