- 名師講壇:Spring實(shí)戰(zhàn)開發(fā)(Redis+SpringDataJPA+SpringMVC+SpringSecurity)
- 李興華
- 816字
- 2020-04-24 14:20:45
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)盡量避免重名類的定義。
- Flink SQL與DataStream入門、進(jìn)階與實(shí)戰(zhàn)
- Cassandra Design Patterns(Second Edition)
- Arduino家居安全系統(tǒng)構(gòu)建實(shí)戰(zhàn)
- Mastering AWS Security
- Django 5企業(yè)級(jí)Web應(yīng)用開發(fā)實(shí)戰(zhàn)(視頻教學(xué)版)
- 零基礎(chǔ)學(xué)HTML+CSS第2版
- Deep Learning for Natural Language Processing
- Implementing Microsoft Dynamics NAV(Third Edition)
- Java程序設(shè)計(jì)實(shí)用教程(第2版)
- Spark技術(shù)內(nèi)幕:深入解析Spark內(nèi)核架構(gòu)設(shè)計(jì)與實(shí)現(xiàn)原理
- WCF全面解析
- 產(chǎn)品架構(gòu)評(píng)估原理與方法
- 網(wǎng)絡(luò)綜合布線與組網(wǎng)實(shí)戰(zhàn)指南
- Mastering VMware vSphere Storage
- 多接入邊緣計(jì)算實(shí)戰(zhàn)