歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Spring基礎——在 Spring Config 文件中基於 XML 的 Bean 的自動裝配

Spring基礎——在 Spring Config 文件中基於 XML 的 Bean 的自動裝配

日期:2017/3/1 9:14:05   编辑:Linux編程

一、Spring IOC 容器支持自動裝配 Bean,所謂自動裝配是指,不需要通過 <property> 或 <constructor-arg> 為 Bean 的屬性注入值的過程。

二、配置:

在 <bean> 的 autowire 屬性裡指定自動裝配的模式。默認為 no 。可以通過 <beans> 根元素的 default-autowire 屬性改變默認值。

三、自動裝配的三種模式:

1.byType(根據類型自動裝配):若 IOC 容器中出現多個與目標 Bean 類型一致的 Bean。Spring 無法識別使用哪個,有二義性。報異常。

2.byName(根據名稱的自動裝配):必須將當前 Bean 的屬性名和目標 Bean 的 id 值設置為相同。

3.construtor(根據構造器自動裝配):不推薦使用。

四、例子

e1:之前的方式,通過 <property> 來指定。

<bean class="com.linuxidc.spring.Address" id="address">
  <property name="addressName" value="beijing"/>
</bean>

<bean class="com.linuxidc.spring.Phone" id="phone" p:phoneNum="123456789"/>

<bean id="employee" class="com.linuxidc.spring.Employee">
  <property name="empName" value="emp01"/>
  <property name="phone" ref="phone"/>
  <property name="address" ref="address"/>
</bean>

輸出:Employee{empName='emp01', address=Address{addressName='beijing'}, phone=Phone{phoneNum='123456789'}}

e2:根據名稱的自動裝配

<bean class="com.linuxidc.spring.Address" id="address">
  <property name="addressName" value="beijing"/>
</bean>

<bean class="com.linuxidc.spring.Phone" id="phone" p:phoneNum="123456789"/>

<bean id="employee" class="com.linuxidc.spring.Employee" autowire="byName">
  <property name="empName" value="emp01"/>
</bean>

輸出:Employee{empName='emp01', address=Address{addressName='beijing'}, phone=Phone{phoneNum='123456789'}}

e3:根據類型的自動裝配

<bean class="com.linuxidc.spring.Address" id="address">
  <property name="addressName" value="beijing"/>
</bean>

<bean class="com.linuxidc.spring.Phone" id="phone" p:phoneNum="123456789"/>

<bean id="employee" class="com.linuxidc.spring.Employee" autowire="byType">
  <property name="empName" value="emp01"/>
</bean>

輸出:Employee{empName='emp01', address=Address{addressName='beijing'}, phone=Phone{phoneNum='123456789'}}

如果定義多個的話,首先在 idea 中,spring config 文件會報錯,給出提示。另外,如果運行的話,會報一個 org.springframework.beans.factory.NoUniqueBeanDefinitionException 這樣的異常。

五、細節問題

1.對 <bean> 的屬性設置 autowire 屬性進行自動裝配將會裝配 Bean 的所有屬性。若希望只裝配某個屬性時,autowire 屬性就不夠靈活了。

2.雖然可以通過 autowire 屬性能自動裝配,但是優先級要低於通過 <property> 配置的屬性。如:

<bean class="com.linuxidc.spring.Phone" id="phone02" p:phoneNum="1234567890"/>
<bean class="com.linuxidc.spring.Address" id="address">
  <property name="addressName" value="beijing"/>
</bean>

<bean class="com.linuxidc.spring.Phone" id="phone" p:phoneNum="123456789"/>

<bean id="employee" class="com.linuxidc.spring.Employee" autowire="byName">
  <property name="empName" value="emp01"/>
  <property name="phone" ref="phone02"/>
</bean>

3.對於 autowire 屬性的兩種類型:根據類型或根據名稱的自動裝配不能同時使用。

4.在實際項目中很少使用基於 XML 的 Bean 的自動裝配,因為明確清晰配置更易讀。

Spring中如何配置Hibernate事務 http://www.linuxidc.com/Linux/2013-12/93681.htm

Struts2整合Spring方法及原理 http://www.linuxidc.com/Linux/2013-12/93692.htm

基於 Spring 設計並實現 RESTful Web Services http://www.linuxidc.com/Linux/2013-10/91974.htm

Spring-3.2.4 + Quartz-2.2.0集成實例 http://www.linuxidc.com/Linux/2013-10/91524.htm

使用 Spring 進行單元測試 http://www.linuxidc.com/Linux/2013-09/89913.htm

運用Spring注解實現Netty服務器端UDP應用程序 http://www.linuxidc.com/Linux/2013-09/89780.htm

Spring 3.x 企業應用開發實戰 PDF完整高清掃描版+源代碼 http://www.linuxidc.com/Linux/2013-10/91357.htm

Spring 的詳細介紹:請點這裡
Spring 的下載地址:請點這裡

Copyright © Linux教程網 All Rights Reserved