Spring中出現(xiàn)NoUniqueBeanDefinitionException的解決方法
使用Spring開發(fā)框架,有時(shí)會(huì)遇到同一個(gè)接口有多個(gè)實(shí)現(xiàn)類的情況,這時(shí)候在代碼中依賴注入該接口的話,Spring就會(huì)報(bào)錯(cuò):org.springframework.beans.factory.NoUniqueBeanDefinitionException
Spring 版本 5.3.6
錯(cuò)誤重現(xiàn)
1.創(chuàng)建接口類,暴露name方法用來區(qū)分具體的實(shí)現(xiàn)類

2.創(chuàng)建接口對應(yīng)的兩個(gè)實(shí)現(xiàn)類


3.使用@Resource注解注入接口

按照以上操作,啟動(dòng)工程就會(huì)發(fā)現(xiàn)控制臺(tái)報(bào)錯(cuò)了

解決方案
可以通過設(shè)置@Resource注解name參數(shù)的值,指定注入的實(shí)例名,來明確Spring該注入哪個(gè)類

默認(rèn)情況下,這里name的值即為Spring的IOC容器中Bean的駝峰標(biāo)識(shí)名稱
還可以通過@Primary注解,標(biāo)記在具體的實(shí)現(xiàn)類中,表明當(dāng)同一個(gè)接口存在多個(gè)實(shí)現(xiàn)類時(shí),優(yōu)先使用該注解標(biāo)記的類

編寫控制器方法來驗(yàn)證注入的類

啟動(dòng)工程訪問控制器,可以看到對應(yīng)的name值,符合我們的預(yù)期~

完整測試工程參考:https://github.com/netbuffer/spring-boot-demo
標(biāo)簽: