溫馨提示×

溫馨提示×

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

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

基于XML配置Spring的自動裝配過程解析

發(fā)布時間:2020-09-02 14:08:05 來源:腳本之家 閱讀:154 作者:請叫我小老弟 欄目:編程語言

一、了解Spring自動裝配的方式

采用傳統(tǒng)的XML方式配置Bean組件的關(guān)鍵代碼如下所示

<bean id="userMapper" class="edu.cn.dao.UserMapperImpl">
  <property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>

<bean id="userService" class="edu.cn.dao.UserServiceImpl">
  <property name="userMapper" ref="userMapper"/>
</bean>

我們通過<property>標(biāo)簽為Bean的屬性注入所需的值,當(dāng)需要維護(hù)的Bean組件及需要注入的屬性更多時,勢必會增加配置的工作量。這時可以使用自動裝配。

二、為每個Bean組件指定自動裝配的方式

使用自動裝配修改配置代碼如下

<bean id="userMapper" class="edu.cn.dao.UserMapperImpl" autowire="byName"/>

<bean id="userService" class="edu.cn.dao.UserServiceImpl" autowire="byName"/>

通過設(shè)置<bean>元素的autowire屬性指定自動裝配,代替了通過<property>標(biāo)簽顯示指定Bean的依賴關(guān)系。由BeanFactory檢查XML配置文件的內(nèi)容,為Bean自動注入依賴關(guān)系。

Spring提供了多種自動裝配方式,autowire屬性常用的取值如下所示

  • no       不使用自動裝配。Bean依賴關(guān)系必須通過property元素定義
  • byType    根據(jù)屬性類型自動裝配。BeanFactory查找容器中的全部Bean,如果正好有一個與依賴屬性類型相同的Bean,就自動裝配這個屬性;如果有多個這樣的Bean,Spring無法決定注入哪個Bean,就拋出一個致命異常;如果沒有匹配的Bean,就什么都不會發(fā)生,屬性不會被設(shè)置
  • byName    根據(jù)屬性名自動裝配。BeanFactory查找容器中的全部Bean,找出id與屬性的setter方法入?yún)⑵ヅ涞腂ean。找到即自動注入,否則什么都不做
  • constructor  與byType的方式類似,不同之處在于它應(yīng)用于構(gòu)造器參數(shù)。如果在容器中沒有找到與構(gòu)造器參數(shù)類型一致的Bean,那么將會拋出異常

在Spring配置文件中通過<bean>元素的autowire屬性可以實現(xiàn)自動裝配。但是,如果要配置的Bean很多,每個Bean都配置autowire屬性也會很繁瑣,可不可以統(tǒng)一設(shè)置自動注入而不必分別配置每個Bean呢?

三、設(shè)置全局自動裝配

<beans>元素提供了default-autowire屬性??梢允褂蒙厦媪谐龅膶傩灾禐?lt;beeas>設(shè)置default-autowire屬性以影響全局。

<?xml version="1.0" encoding="UTF-8"?> 
<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-2.5.xsd"
    default-autowire="byName">
  
</beans>

在<beans>節(jié)點上設(shè)置default-autowired時,依然可以為<bean>節(jié)點設(shè)置autowire屬性。這時該<bean>節(jié)點上的自動裝配設(shè)置將覆蓋全局設(shè)置,成為該Bean的自動裝配策略。

對于大型的應(yīng)用,不鼓勵使用自動裝配。雖然使用自動裝配可以減少配置工作量,但也大大降低了依賴關(guān)系的清晰性和透明性。依賴關(guān)系的裝配僅依賴于源文件的屬性名或類型,導(dǎo)致Bean和Bean之間的耦合降低到代碼層次,不利于高層次解耦合。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持億速云。

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

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

AI