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

