日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Spring應(yīng)用拋出NoUniqueBeanDefinitionException異常的解決方案

瀏覽:28日期:2023-07-08 16:43:54
目錄前言解決方案前言

我們?cè)陂_(kāi)發(fā)Spring應(yīng)用時(shí)可能會(huì)不小心注入兩個(gè)相同類型的Bean,比如實(shí)現(xiàn)了兩個(gè)相同Service接口的類,示例偽代碼如下:

interface SampleService { String getName();}class ServiceA implements SampleService{ String getName(){ return 'john'; }}class ServiceB implements SampleService{ String getName(){ return 'wonder'; }}

這時(shí)候我們用SampleService接口注入

@AutowiredSampleService sampleService;

啟動(dòng)應(yīng)用后,Spring就會(huì)優(yōu)雅地提示如下錯(cuò)誤:

Exception in thread 'main' org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type ’com.john.primary.SampleService’ available: expected single matching bean but found 2: ServiceA,ServiceB

但是我們不想報(bào)錯(cuò)且想獲取其中某一個(gè)Bean,這時(shí)候我們?cè)撛趺崔k呢?

解決方案

既然包含了兩個(gè)相同類型的Bean,通常來(lái)說(shuō)我們只要把其中一個(gè)Bean不注入就好,那如果我們想保留這兩個(gè)相同類型的Bean,但是又想讓SampleService正常注入呢?

如果我們是用早期Spring的Xml配置Bean時(shí),可以使用如下兩種方式解決:

1.那么我們可以在其中一個(gè)Bean配置里加上autowire-candidate='false'

<bean id='serviceA' class='com.john.primary.ServiceA' /><bean id='serviceB' class='com.john.primary.ServiceB' autowire-candidate='false' />

2.或者在其中一個(gè)Bean配置里加上primary='true':

<bean id='serviceA' class='com.john.primary.ServiceA' primary='true'/><bean id='serviceB' class='com.john.primary.ServiceB' />

3.采用javax.annotation.Priority注解

這種方式需要我們?cè)贐eanFactory里加上dependencyComparator,示例代碼如下:

DefaultListableBeanFactory beanFactory = (DefaultListableBeanFactory)context.getBeanFactory();//@Priority注解比較beanFactory.setDependencyComparator(AnnotationAwareOrderComparator.INSTANCE);SampleService sampleService= context.getBean(SampleService.class);

4.實(shí)現(xiàn)注解Order或者實(shí)現(xiàn)org.springframework.core.Ordered接口

public class ServiceA implements SampleService,Ordered { @Override public int getOrder() { return 0; } @Override public String toString() { return 'ServiceA{}'; }}

這種方式需要我們重寫(xiě)AnnotationAwareOrderComparator的getPriority方法,示例代碼如下:

public class PriorityOrderComparator extends AnnotationAwareOrderComparator { /** * Shared default instance of {@code PriorityOrderComparator}. */ public static final PriorityOrderComparator INSTANCE = new PriorityOrderComparator(); @Override public Integer getPriority(Object obj) { //先獲取Priority Integer order = super.getPriority(obj); if(order == null)//獲取Order注解或者Ordered接口返回值return super.findOrder(obj); return order; }}

我們還可以使用目前流行的注解方式來(lái)實(shí)現(xiàn),Spring文檔中也提到過(guò):

Because autowiring by type may lead to multiple candidates, it is often necessary to have more control over the selection process. One way to accomplish this is with Spring’s @Primary annotation. @Primary indicates that a particular bean should be given preference when multiple beans are candidates to be autowired to a single-valued dependency. If exactly one primary bean exists among the candidates, it becomes the autowired value.

那么可以使用如下方式:

1.@Primary注解:

該注解可以標(biāo)注在類上或者方法上,示例如下:

@Primary@Componentclass ServiceA implements SampleService{ String getName(){ return 'john'; }}

注解在有@Bean注解的方法上:

@Bean@PrimarySampleService sampleService(){ return new ServiceA();}

2.還是采用Xml配置中的第三或者第四種解決方案,只是采用第四種方案的話還是需要重新擴(kuò)展AnnotationAwareOrderComparator

以上就是Spring應(yīng)用拋出NoUniqueBeanDefinitionException異常的解決方案的詳細(xì)內(nèi)容,更多關(guān)于Spring 拋出異常的解決的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Spring
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品mm| 91成人超碰| 日韩午夜视频在线| 亚洲一二av| 亚洲精品女人| 人人爱人人干婷婷丁香亚洲| 日韩国产欧美三级| 婷婷综合一区| 日韩高清在线一区| 国产调教精品| 国产精品theporn| 久久精品五月| www.com.cn成人| 精品免费av| 欧美久久天堂| 99国产精品一区二区| 国产精品7m凸凹视频分类| 日韩亚洲精品在线| 亚洲精品免费观看| 国产欧美一区二区精品久久久| 麻豆一区二区三区| 日韩欧美三级| 亚洲免费中文| 亚州精品视频| 久久不卡国产精品一区二区| 日韩综合一区| 亚洲精品a级片| 日本亚洲不卡| 国产精品一卡| 裤袜国产欧美精品一区| 99久久久久久中文字幕一区| 午夜国产一区二区| 天堂va在线高清一区| 国产精品mv在线观看| 日韩在线视频精品| 香蕉久久久久久久av网站| 啪啪亚洲精品| 亚洲天堂av影院| 视频一区欧美精品| 国产精品sm| 亚洲国产不卡| 奇米亚洲欧美| 日本精品不卡| 欧美专区在线| 免费视频一区二区三区在线观看 | 蜜桃tv一区二区三区| 在线精品国产亚洲| 精品九九久久| 国产精品视区| 欧美激情aⅴ一区二区三区 | 四虎精品永久免费| 久久精品免视看国产成人| 女人天堂亚洲aⅴ在线观看| 欧美三区不卡| 久久五月天小说| 蜜桃久久av一区| 风间由美中文字幕在线看视频国产欧美| 亚洲精品2区| 国内精品美女在线观看| 麻豆精品91| 国精品产品一区| 天堂av在线一区| 韩日一区二区| 日韩毛片网站| 91精品一区国产高清在线gif| 天堂精品久久久久| 日本在线精品| 国产日韩一区| 亚洲免费婷婷| 日韩一区二区三区免费播放| 亚洲精品第一| 婷婷成人综合| 国产精品s色| 午夜在线视频观看日韩17c| 精品视频免费| 蜜臀va亚洲va欧美va天堂| 亚洲精品成人图区| 日本欧美久久久久免费播放网| 国产91一区| 麻豆国产精品一区二区三区| 三级欧美韩日大片在线看| 麻豆精品蜜桃| 久久av偷拍| 日韩有吗在线观看| 在线亚洲激情| 正在播放日韩精品| 国产精品天堂蜜av在线播放| 丝袜国产日韩另类美女| av资源亚洲| 免费日韩一区二区三区| 日韩欧美另类中文字幕| 国产亚洲网站| 欧美亚洲在线日韩| 日韩综合一区| 成人午夜亚洲| 美女视频黄久久| 日韩精品一级| 视频一区二区国产| 在线亚洲国产精品网站| 91精品国产乱码久久久久久久 | 国产一区二区三区国产精品| 日韩激情综合| 亚洲最新av| 亚洲免费在线| 在线一区欧美| 欧美特黄一级| 欧美亚洲国产精品久久| 日韩精品久久久久久久电影99爱| 精品一区二区三区视频在线播放| 97久久中文字幕| 亚洲精品三级| 亚洲色图国产| 午夜视频一区二区在线观看| 亚洲黄色在线| 欧美va天堂在线| 欧美日韩精品在线一区| 日韩在线看片| 日韩精品影视| 在线日韩一区| 欧美亚洲国产激情| 伊人精品一区| 宅男在线一区| 亚洲精品a级片| 国产亚洲在线观看| 亚洲一区欧美二区| 视频在线观看91| 久热精品在线| 亚洲精品美女| 日韩午夜视频在线| 日韩精品1区2区3区| 日韩av网站在线观看| 国产亚洲电影| 精品精品99| 精品视频91| av资源亚洲| 欧美精选一区二区三区| 在线一区免费| 亚洲午夜国产成人| 午夜电影一区| 国产精品日本一区二区三区在线| 国产精品一国产精品| 超级白嫩亚洲国产第一| 麻豆视频在线看| 成人羞羞视频在线看网址| 欧美日韩水蜜桃| 免费成人在线视频观看| 日韩av中文字幕一区二区三区| 国产精一区二区| 精品一区二区三区中文字幕| 欧美aa在线观看| 亚洲一区二区av| 国产日韩一区| 亚洲四虎影院| 国产欧美大片| 国产66精品| 欧美一区二区三区激情视频| 国产一区清纯| 免费欧美在线视频| 免费人成黄页网站在线一区二区| 亚洲精品免费观看| 麻豆一区二区99久久久久| 黄色在线网站噜噜噜| 性欧美69xoxoxoxo| 日韩高清在线观看一区二区| 久久亚州av| 美女久久久久| 最新国产精品视频| 国产欧美一区二区三区精品观看 | 鲁大师精品99久久久| 高清av一区| 亚洲午夜电影| 日本成人中文字幕| 国产精品不卡| 国产精品日本| 国产极品模特精品一二| 日韩高清中文字幕一区二区| 一区二区日韩免费看| 黄色网一区二区| 手机精品视频在线观看| 国产精品啊v在线| 日韩精品久久久久久久电影99爱| 亚洲欧洲日韩精品在线| 精品网站999| 欧美一级全黄| 美日韩一区二区三区| 久久婷婷激情| 中文字幕一区二区三区在线视频| 精品三级av| 蜜臀av在线播放一区二区三区| 国产精品久久亚洲不卡| 欧美日韩精品一区二区视频| 国产探花在线精品一区二区| 美女毛片一区二区三区四区| 国产精品久久久久久久久久妞妞| 欧美日中文字幕| 麻豆一区在线| 亚洲免费一区三区| 日韩在线高清| 国产免费播放一区二区| 88xx成人免费观看视频库|