溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Spring中裝配Bean的方法有哪些

發(fā)布時間:2020-11-10 17:21:10 來源:億速云 閱讀:177 作者:Leah 欄目:編程語言

Spring中裝配Bean的方法有哪些?相信很多沒有經(jīng)驗(yàn)的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。

spring的自動裝配功能的定義:無須在Spring配置文件中描述javaBean之間的依賴關(guān)系(如配置<property>、<constructor-arg>)。IOC容器會自動建立javabean之間的關(guān)聯(lián)關(guān)系。

如果沒有采用自動裝配的話,手動裝配我們通常在配置文件中進(jìn)行實(shí)現(xiàn):一下代碼就是手動裝配:

<beans xmlns="http://www.springframework.org/schema/beans" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xsi:schemaLocation="http://www.springframework.org/schema/beans 
  http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> 
 
  <bean id="customerDAO" class="com.hebeu.customer.dao.JdbcCustomerDAO"> 
    <property name="dataSource" ref="dataSource" /> 
  </bean> 
 
</beans> 

通過<property name="dataSource" ref="dataSource" />向customerDAO的bean中注入了dataSource

在Spring框架,可以用 auto-wiring 功能會自動裝配Bean。要啟用它,只需要在 <bean>定義“autowire”屬性。

<bean id="customer" class="com.yiibai.common.Customer" autowire="byName" />

在Spring中,支持 5 自動裝配模式。

  • no – 缺省情況下,自動配置是通過“ref”屬性手動設(shè)定
  • byName – 根據(jù)屬性名稱自動裝配。如果一個bean的名稱和其他bean屬性的名稱是一樣的,將會自裝配它。
  • byType – 按數(shù)據(jù)類型自動裝配。如果一個bean的數(shù)據(jù)類型是用其它bean屬性的數(shù)據(jù)類型,兼容并自動裝配它。
  • constructor – 在構(gòu)造函數(shù)參數(shù)的byType方式。
  • autodetect – 如果找到默認(rèn)的構(gòu)造函數(shù),使用“自動裝配用構(gòu)造”; 否則,使用“按類型自動裝配”?!驹赟pring3.0以后的版本被廢棄,已經(jīng)不再合法了】

第一種自動裝配【根據(jù)屬性名稱自動裝配】

package com.hebeu.model; 
 
public class Customer { 
 
  private Address address; 
   
  public Customer() { 
     
  } 
   
  public Customer(int id, Address address) { 
    super(); 
    this.address = address; 
  } 
 
  public Address getAddress() { 
    return address; 
  } 
 
  public void setAddress(Address address) { 
    this.address = address; 
  } 
   
} 

package com.hebeu.model; 
 
public class Address { 
 
  private String fulladdress; 
   
  public Address(){ 
     
  } 
   
  public Address(String addr){ 
    this.fulladdress = addr; 
  } 
 
  public String getFulladdress() { 
    return fulladdress; 
  } 
 
  public void setFulladdress(String fulladdress) { 
    this.fulladdress = fulladdress; 
  } 
   
} 

<beans xmlns="http://www.springframework.org/schema/beans" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xsi:schemaLocation="http://www.springframework.org/schema/beans 
  http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> 
   
  <bean id="customer" class="com.hebeu.model.Customer" autowire="byName"></bean>
   
  <bean id="address" class="com.hebeu.model.Address"> 
    <property name="fulladdress" value="YiLong Road, CA 188"></property> 
  </bean> 
   
</beans>  

這樣就將address注入到Customer中。這就是自動注入ByName.在Customer bean中公開了一個屬性address,Spring容器會找到address bean,并且裝配。這里必須要注意,Customer中要被注入的bean的set方法要求必須是public的,否則會報空指針異常。還有配置的bean的id必須和Customer中聲明的變量名相同。

第二種自動裝配【根據(jù)數(shù)據(jù)類型自動裝配】

聲明的倆個bean同樣為Customer以及Address,將applicationContext.xml轉(zhuǎn)換為這樣的就是實(shí)現(xiàn)根據(jù)數(shù)據(jù)類型進(jìn)行自動裝配。

<beans xmlns="http://www.springframework.org/schema/beans" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xsi:schemaLocation="http://www.springframework.org/schema/beans 
  http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> 
   
  <bean id="customer" class="com.hebeu.model.Customer" <strong><span >autowire="byType"</span></strong>></bean> 
   
  <bean id="bean1" class="com.hebeu.model.Address"> 
    <property name="fulladdress" value="YiLong Road, CA 188"></property> 
  </bean> 
</beans>  

類型自動裝配的意思是如果一個bean的數(shù)據(jù)類型與其他的bean屬性的數(shù)據(jù)類型相同,將會自動兼容裝配它。當(dāng)然要求只能配置一個某一個類型的bean.如果配置成這樣,那么是會出錯的。

<beans xmlns="http://www.springframework.org/schema/beans" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xsi:schemaLocation="http://www.springframework.org/schema/beans 
  http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> 
   
  <bean id="customer" class="com.hebeu.model.Customer" autowire="byType"></bean> 
   
  <bean id="bean1" class="com.hebeu.model.Address"> 
    <property name="fulladdress" value="YiLong Road, CA 188"></property> 
  </bean> 
  <bean id="bean2" class="com.hebeu.model.Address"> 
    <property name="fulladdress" value="YiLong Road, CA 188"></property> 
  </bean> 
</beans>  

第三種自動裝配【根據(jù)構(gòu)造方法自動裝配】

案例同上,將applicationContext.xml轉(zhuǎn)換為如下,就實(shí)現(xiàn)了按照構(gòu)造方法自動裝配:

<beans xmlns="http://www.springframework.org/schema/beans" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xsi:schemaLocation="http://www.springframework.org/schema/beans 
  http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> 
   
  <bean id="customer" class="com.hebeu.model.Customer"> 
    <!-- 構(gòu)造方法的參數(shù) --> 
    <constructor-arg> 
      <ref bean="bean1"/> 
    </constructor-arg> 
  </bean> 
   
  <bean id="bean1" class="com.hebeu.model.Address"> 
    <property name="fulladdress" value="YiLong Road, CA 188"></property> 
  </bean> 
   
</beans> 

 它實(shí)際上是構(gòu)造函數(shù)的參數(shù)類型自動裝配。這意味著如果一個bean的數(shù)據(jù)類型與其他bean的構(gòu)造器參數(shù)的數(shù)據(jù)類型是相同的,那么就自動裝配。

看完上述內(nèi)容,你們掌握Spring中裝配Bean的方法有哪些的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI