官术网_书友最值得收藏!

3.5 自動(dòng)匹配

在Spring中除了可以通過名稱實(shí)現(xiàn)Bean的關(guān)聯(lián)之外,也可以利用自動(dòng)匹配形式找到指定的類型并進(jìn)行關(guān)聯(lián)。之前使用過的@Resource就屬于這種自動(dòng)匹配的處理形式。進(jìn)行自動(dòng)匹配時(shí)可以使用兩種模式:根據(jù)名稱(byName)匹配和根據(jù)類型(byType)匹配。

1.【mldnspring-base項(xiàng)目】定義要使用的程序類。

此時(shí),Emp程序中定義的Dept類型的屬性名稱為dept,這樣就可以根據(jù)名稱自動(dòng)進(jìn)行匹配,利用反射獲取相應(yīng)的對(duì)象實(shí)例后實(shí)現(xiàn)內(nèi)容設(shè)置。

2.【mldnspring-base項(xiàng)目】定義spring-base.xml配置文件,根據(jù)類型進(jìn)行Bean的自動(dòng)匹配。

本程序在定義Emp對(duì)象時(shí)使用autowire="byType"進(jìn)行了自動(dòng)匹配,因此會(huì)自動(dòng)根據(jù)類型找到合適的Bean并進(jìn)行注入。

3.【mldnspring-base項(xiàng)目】編寫測(cè)試類。

本程序在進(jìn)行配置的時(shí)候并沒有為Emp類設(shè)置具體的屬性,但由于采用了自動(dòng)類型匹配,所以可實(shí)現(xiàn)部門對(duì)象的注入。

4.【mldnspring-base項(xiàng)目】除了根據(jù)類型匹配外,也可以根據(jù)名稱實(shí)現(xiàn)匹配,這樣即便有多個(gè)同類型Bean存在,也可以根據(jù)名稱匹配注入。

本程序定義了兩個(gè)Dept對(duì)象(名稱分別為mydept與dept),由于在定義Emp對(duì)象時(shí)使用的是根據(jù)名稱自動(dòng)注入(autowire="byName"),因此會(huì)自動(dòng)將20號(hào)部門的對(duì)象信息注入到Emp對(duì)象之中。

5.【mldnspring-base項(xiàng)目】在實(shí)際的開發(fā)過程之中,有可能存在多個(gè)相同類型的Bean配置,如果已經(jīng)配置了根據(jù)類型自動(dòng)注入,則這里可以使用primary="true"來配置優(yōu)先選擇項(xiàng)。

本程序在定義Emp對(duì)象時(shí)采用了根據(jù)類型自動(dòng)匹配,由于此時(shí)設(shè)置了兩個(gè)Dept對(duì)象,所以默認(rèn)情況下應(yīng)出現(xiàn)無法匹配的錯(cuò)誤信息。由于在mydept對(duì)象定義時(shí)使用了primary="true"屬性,因此這里并不會(huì)產(chǎn)生沖突,而會(huì)直接將此對(duì)象注入到Emp對(duì)象之中。

提示:除了可設(shè)置優(yōu)先選擇項(xiàng),也可以設(shè)置取消候選項(xiàng)。

對(duì)于以上的配置處理,如果不想使用primary="true"屬性,也可以直接將某一個(gè)配置的Bean取消候選注入資格。使用autowire-candidate="false"可取消某個(gè)類的注入資格。

范例:取消類的注入資格。

在本程序中定義了兩個(gè)Dept對(duì)象,由于dept取消了候選配置資格,所以即便根據(jù)類型自動(dòng)匹配,也無法使用此對(duì)象。

自動(dòng)匹配在實(shí)際開發(fā)中非常重要,并且應(yīng)用廣泛。雖然在Spring中提供了一系列的主選與候選控制,但是從實(shí)際開發(fā)來講,應(yīng)盡量避免重名類的定義。

主站蜘蛛池模板: 崇信县| 阿克陶县| 金寨县| 耒阳市| 措美县| 洱源县| 新丰县| 万盛区| 永善县| 阜平县| 冀州市| 固阳县| 亳州市| 定远县| 星子县| 永丰县| 阿城市| 宁都县| 宣化县| 疏勒县| 鹰潭市| 东兴市| 治县。| 崇阳县| 哈尔滨市| 乐东| 旺苍县| 尉氏县| 巴彦淖尔市| 常州市| 保亭| 舞钢市| 滕州市| 巴马| 六安市| 临湘市| 江门市| 静宁县| 张北县| 方城县| 天门市|