基于XML配置Spring的自動(dòng)裝配過(guò)程解析
一、了解Spring自動(dòng)裝配的方式
采用傳統(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>
我們通過(guò)<property>標(biāo)簽為Bean的屬性注入所需的值,當(dāng)需要維護(hù)的Bean組件及需要注入的屬性更多時(shí),勢(shì)必會(huì)增加配置的工作量。這時(shí)可以使用自動(dòng)裝配。
二、為每個(gè)Bean組件指定自動(dòng)裝配的方式
使用自動(dòng)裝配修改配置代碼如下
<bean id="userMapper" class="edu.cn.dao.UserMapperImpl" autowire="byName"/> <bean id="userService" class="edu.cn.dao.UserServiceImpl" autowire="byName"/>
通過(guò)設(shè)置<bean>元素的autowire屬性指定自動(dòng)裝配,代替了通過(guò)<property>標(biāo)簽顯示指定Bean的依賴(lài)關(guān)系。由BeanFactory檢查XML配置文件的內(nèi)容,為Bean自動(dòng)注入依賴(lài)關(guān)系。
Spring提供了多種自動(dòng)裝配方式,autowire屬性常用的取值如下所示
- no 不使用自動(dòng)裝配。Bean依賴(lài)關(guān)系必須通過(guò)property元素定義
- byType 根據(jù)屬性類(lèi)型自動(dòng)裝配。BeanFactory查找容器中的全部Bean,如果正好有一個(gè)與依賴(lài)屬性類(lèi)型相同的Bean,就自動(dòng)裝配這個(gè)屬性;如果有多個(gè)這樣的Bean,Spring無(wú)法決定注入哪個(gè)Bean,就拋出一個(gè)致命異常;如果沒(méi)有匹配的Bean,就什么都不會(huì)發(fā)生,屬性不會(huì)被設(shè)置
- byName 根據(jù)屬性名自動(dòng)裝配。BeanFactory查找容器中的全部Bean,找出id與屬性的setter方法入?yún)⑵ヅ涞腂ean。找到即自動(dòng)注入,否則什么都不做
- constructor 與byType的方式類(lèi)似,不同之處在于它應(yīng)用于構(gòu)造器參數(shù)。如果在容器中沒(méi)有找到與構(gòu)造器參數(shù)類(lèi)型一致的Bean,那么將會(huì)拋出異常
在Spring配置文件中通過(guò)<bean>元素的autowire屬性可以實(shí)現(xiàn)自動(dòng)裝配。但是,如果要配置的Bean很多,每個(gè)Bean都配置autowire屬性也會(huì)很繁瑣,可不可以統(tǒng)一設(shè)置自動(dòng)注入而不必分別配置每個(gè)Bean呢?
三、設(shè)置全局自動(dòng)裝配
<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é)點(diǎn)上設(shè)置default-autowired時(shí),依然可以為<bean>節(jié)點(diǎn)設(shè)置autowire屬性。這時(shí)該<bean>節(jié)點(diǎn)上的自動(dòng)裝配設(shè)置將覆蓋全局設(shè)置,成為該Bean的自動(dòng)裝配策略。
對(duì)于大型的應(yīng)用,不鼓勵(lì)使用自動(dòng)裝配。雖然使用自動(dòng)裝配可以減少配置工作量,但也大大降低了依賴(lài)關(guān)系的清晰性和透明性。依賴(lài)關(guān)系的裝配僅依賴(lài)于源文件的屬性名或類(lèi)型,導(dǎo)致Bean和Bean之間的耦合降低到代碼層次,不利于高層次解耦合。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
spring boot 配置動(dòng)態(tài)刷新詳解
這篇文章主要介紹了spring boot 配置動(dòng)態(tài)刷新實(shí)現(xiàn)詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2021-09-09
springboot構(gòu)造樹(shù)形結(jié)構(gòu)數(shù)據(jù)并查詢(xún)的方法
本文主要介紹了springboot怎樣構(gòu)造樹(shù)形結(jié)構(gòu)數(shù)據(jù)并查詢(xún),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11
Maven配置項(xiàng)目依賴(lài)使用本地倉(cāng)庫(kù)的方法匯總(小結(jié))
這篇文章主要介紹了Maven配置項(xiàng)目依賴(lài)使用本地倉(cāng)庫(kù)的方法匯總(小結(jié)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07
SpringBoot 如何添加容器啟動(dòng)的初始化邏輯的操作方法
這篇文章主要介紹了SpringBoot 如何添加容器啟動(dòng)的初始化邏輯,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09
IntelliJ IDEA設(shè)置JVM運(yùn)行參數(shù)的操作方法
這篇文章主要介紹了IntelliJ IDEA設(shè)置JVM運(yùn)行參數(shù)的操作方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2018-03-03
Java之定時(shí)器Timer和定時(shí)任務(wù)TimerTask應(yīng)用以及原理解讀
文章介紹了Java JDK自帶的定時(shí)器Timer和定時(shí)任務(wù)TimerTask的使用和原理,Timer和TimerTask成對(duì)出現(xiàn),Timer是定時(shí)器,TimerTask是定時(shí)任務(wù),TimerTask實(shí)現(xiàn)Runnable接口的run方法,Timer的屬性TimerThreadthread繼承Thread2024-12-12
@AutoConfigurationPackage與@ComponentScan注解區(qū)別
這篇文章主要介紹了@AutoConfigurationPackage與@ComponentScan注解區(qū)別,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06
Jenkins Maven pom jar打包未拉取最新包解決辦法
包版本號(hào)未變更新后,jenkins打包不會(huì)拉取最新包,本文主要介紹了Jenkins Maven pom jar打包未拉取最新包解決辦法,具有一定的參考價(jià)值,感興趣的可以了解一下2024-02-02
Mybatis-Plus的應(yīng)用場(chǎng)景描述及注入SQL原理分析
MyBatis-Plus是一個(gè) MyBatis 的增強(qiáng)工具,在 MyBatis 的基礎(chǔ)上只做增強(qiáng)不做改變,為簡(jiǎn)化開(kāi)發(fā)、提高效率而生,本文重點(diǎn)給大家介紹Mybatis-Plus的應(yīng)用場(chǎng)景及注入SQL原理分析,感興趣的朋友跟隨小編一起學(xué)習(xí)吧2021-05-05

