国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

當注入的 Bean 存在沖突時,到底有多少種解決方案?松哥總結了五種!

開發 前端
根據 type 去查找相應的 Bean 的時候,找到了多個候選 Bean,所以才會報錯,所以我們注冊一個 Bean 的時候,可以設置該 Bean 不是候選 Bean,這個設置并不影響通過 name 注入一個 Bean。

當我們從 Spring 容器中“拉”取一個 Bean 回來的時候,可以按照名字去拉取,也可以按照類型去拉取,按照 BeanName 拉取的話,一般來說只要 BeanName 書寫沒有問題,都是沒問題的。但是如果是按照類型去拉取,則可能會因為 Bean 存在多個實例從而導致失敗。

在前面的文章中,松哥和小伙伴們分享了 @Primary、@Qualifier 注解在處理該問題時的一些具體的方案,但是都是零散的,今天咱們來把這些方案總結一下,順便再來看看是否還存在其他方案?

1. 問題呈現

假設我有 A、B 兩個類,在 A 中注入 B,如下:

@Component
public class A {
    @Autowired
    B b;
}

至于 B,則在配置類中存在多個實例:

@Configuration
@ComponentScan
public class JavaConfig {
    @Bean("b1")
    B b1() {
        return new B();
    }

    @Bean("b2")
    B b2() {
        return new B();
    }
}

這樣的項目啟動之后,必然會拋出如下異常:

圖片圖片

今天我們就來總結下這個問題的解決方案。

2. 解決方案分析

2.1 @Resource

使用 @Resource 注解,這個應該是大家最容易想到的方案之一,不過使用 @Resource 注解需要額外添加依賴:

<dependency>
    <groupId>jakarta.annotation</groupId>
    <artifactId>jakarta.annotation-api</artifactId>
    <version>2.1.1</version>
</dependency>

加了依賴之后,現在就可以直接使用 @Resource 注解了:

@Service
public class A {
    @Resource(name = "b1")
    B b;
}

2.2 @Qualifier 指定 name

另一種方案就是搭配 @Qualifier 注解,通過該注解指定 Bean 的名稱:

@Service
public class A {
    @Autowired
    @Qualifier("b1")
    B b;
}

2.3 @Qualifier 不指定 name

這種方案也是搭配 @Qualifier,但是并不指定 BeanName,而是在 B 注冊和 A 中注入 B 的時候,分別標記一個 @Qualifier 注解:

@Service
public class A {
    @Autowired
    @Qualifier
    B b;
}

@Configuration
@ComponentScan
public class JavaConfig {

    @Bean
    @Qualifier
    B b1() {
        return new B();
    }

    @Bean
    B b2() {
        return new B();
    }

}

2.4 不作為候選 Bean

另外還有一種方案,就是在注冊 Bean 的時候,告訴 Spring 容器,這個 Bean 在通過 type 進行注入的時候,不作為候選 Bean。

小伙伴們知道,在第一小節中報的錯,原因就是因為根據 type 去查找相應的 Bean 的時候,找到了多個候選 Bean,所以才會報錯,所以我們注冊一個 Bean 的時候,可以設置該 Bean 不是候選 Bean,這個設置并不影響通過 name 注入一個 Bean。

具體配置如下:

Java 代碼配置:

@Configuration
@ComponentScan
public class JavaConfig {

    @Bean(autowireCandidate = false)
    B b1() {
        return new B();
    }

    @Bean
    B b2() {
        return new B();
    }

}

autowireCandidate 屬性就表示這個 Bean 不是一個候選 Bean。

XML 配置:

<bean class="org.javaboy.bean.p2.B" autowire-candidate="false"/>

autowire-candidate 屬性表示當前 Bean 是否作為一個候選 Bean。

2.5 @Primary

差點把我們最常用的方案忘了。@Primary 表示當通過 type 注入的時候,如果當前 Bean 存在多個實例,則優先使用帶有 @Primary 注解的 Bean。

@Service
public class A {
    @Autowired
    B b;
}

@Configuration
@ComponentScan
public class JavaConfig {

    @Bean
    @Primary
    B b1() {
        return new B();
    }

    @Bean
    B b2() {
        return new B();
    }

}

好啦,這就是松哥總結出來的 5 種方案,實際上,基于這五種,還能衍生出來一些方案,這就需要小伙伴們自行探索啦~

最后大家思考這樣一問題:對于第一小節提出來的問題,如果同時使用 2.2 和 2.5 小節的方案,那么哪一個會生效呢?

責任編輯:武曉燕 來源: 江南一點雨
相關推薦

2012-03-29 09:57:06

jQuery

2018-06-14 21:03:41

數據庫MySQL日志類型

2018-05-04 07:36:35

醫療行業物聯網IoT

2023-04-14 14:54:29

2023-05-26 07:19:49

Spring聲明式事務

2022-03-09 18:09:47

前端CSS代碼

2022-09-27 09:43:08

物聯網設備物聯網

2013-04-25 14:26:54

GridView

2025-10-28 08:21:32

2011-06-07 10:15:38

GNULinux

2019-09-10 10:46:24

微服務架構傳統服務

2023-04-18 16:31:00

2021-04-21 21:04:42

內存場景泄露

2025-08-18 08:26:14

2021-05-07 09:39:54

數據清洗方式

2010-01-12 12:15:25

SOA安全解決方案

2021-09-26 09:17:01

Python命令定時任務

2024-12-02 14:30:20

2012-12-26 11:04:14

2010-09-10 12:59:33

DIV嵌套CSS
點贊
收藏

51CTO技術棧公眾號

永久免费精品影视网站| 国产精品毛片va一区二区三区| 99精品老司机免费视频| 国产欧美日韩综合精品一区二区| 日本一区二区三区www| 日韩精品久久久久久久电影99爱| 深夜福利91大全| 中文字幕在线看片| 精品久久一二三区| av网站在线看| 欧美一级黄色大片| 超碰在线免费播放| 欧美高清精品3d| 在线观看完整版免费| 日本韩国欧美三级| 国产在线观看网站| 欧美午夜免费电影| melody高清在线观看| 精品视频在线免费看| 在线理论视频| 在线看不卡av| 国产原厂视频在线观看| 日韩欧美中文一区| 成全电影大全在线观看| 日韩电影在线观看永久视频免费网站| 2001个疯子在线观看| 亚洲丝袜av一区| 日韩精品免费观看视频| 精品国内亚洲在观看18黄| 欧一区二区三区| 午夜精品一区二区三区在线视频 | 中文字幕va一区二区三区| 激情内射人妻1区2区3区 | 亚洲欧美激情一区二区| 日本高清网站| 日韩欧美国产视频| 九色porny在线| 亚洲精品一区二区网址| 欧美97人人模人人爽人人喊视频| 欧美人交a欧美精品| 精品一区电影| 精品一区二区三区视频日产| 国产一区二区电影| 成人在色线视频在线观看免费大全| 亚洲成人免费视频| 免费网站在线观看人| 欧美sss在线视频| 日韩天堂在线视频| 国产福利在线视频| 一区二区免费在线播放| 国产树林野战在线播放| 国产精品91一区二区| 日本高清久久天堂| 色97色成人| 免费在线观看精品| 日韩极品一区| 久久久日本电影| 国产一区二区三区四区五区3d| 在线观看日韩电影| 视频免费观看| 日韩国产精品久久久| 欧美在线影院在线视频| 激情久久久久久久久久久久久久久久 | 国产精品毛片一区二区三区四区| 日韩欧美在线123| av在线亚洲一区| 成人中文字幕+乱码+中文字幕| 日本欧美久久久久免费播放网| 久激情内射婷内射蜜桃| 狠狠色狠色综合曰曰| 麻豆mv在线看| 国产精品视频精品| 国产精品77777| 性xxxx丰满孕妇xxxx另类| 在线观看精品国产视频| 亚洲欧美综合| 免费在线观看亚洲视频| 欧美在线观看视频一区二区 | 欧美另类z0zxhd电影| 不卡的国产精品| 成人av免费在线看| 亚洲国产成人午夜在线一区 | 欧美日韩一区二区三区| 久久69成人| 国产精品我不卡| 国产精品久久久久影院老司| 国精产品一区| 国产精品狼人色视频一区| caoporen国产精品视频| 日韩黄色影院| 国产精品一香蕉国产线看观看| 国产很黄免费观看久久| 黄色大片在线免费观看| 欧美诱惑福利视频| 99久久精品99国产精品| 岛国大片在线观看| 青青草原成人在线视频| 91丝袜美腿高跟国产极品老师| 女人黄色免费在线观看| 成人美女免费网站视频| 国产精品第四页| 欧美一区=区三区| 一区二区视频在线播放| 欧美日韩精品久久久| 99久久激情| 深夜爽爽视频| 91精品国产高清久久久久久久久| 成人h版在线观看| 高清不卡亚洲| 亚洲精品偷拍视频| 亚洲国产成人av在线| 亚洲福利精品| 视频一区二区在线播放| 国产精品久久久久久久久久99| 亚洲国产高清不卡| 中文字幕一区二区三区四区久久 | 欧美精品久久久久久久久久| 国产在线不卡一区| 成人三级高清视频在线看| 免费国产一区二区| 欧美日韩亚洲网| 久久久久av| 四虎影视精品成人| 国产免费观看久久黄| 亚洲一区二区三区四区中文字幕| 久久国产精品色av免费看| 无遮挡又爽又刺激的视频| 色狠狠久久aa北条麻妃| 成人涩涩免费视频| 日韩中文视频| 婷婷五月综合缴情在线视频| 亚洲欧美日本另类| 国产v综合v亚洲欧| 久久野战av| www.成年人视频| 久久久久999| 国产亚洲一区二区在线观看| 欧美不卡在线观看| 毛片毛片毛片毛片毛片毛片毛片毛片毛片| 日韩一区二区精品视频| 26uuu亚洲| 女同一区二区三区| 黄页网址在线观看| 国产成人精品免费视频大全最热 | 日韩二区三区| 黄色99视频| 精品成人一区二区三区| 精品综合免费视频观看| 美女久久久久久| 欧美男女交配视频| 国产精品香蕉国产| 欧美日韩综合色| 国产一区二区三区在线看麻豆| 9999精品视频| 久久97久久97精品免视看| 久草视频在线看| 日本10禁啪啪无遮挡免费一区二区| 97人人模人人爽人人喊中文字| 婷婷中文字幕综合| 日韩精品1区2区3区| 日本一道高清一区二区三区| 91精品视频一区二区| 国产一区二区三区亚洲| 亚洲草久电影| 国产综合色激情| 欧美三日本三级少妇三99| ww国产内射精品后入国产| 成人三级视频在线播放| 亚洲欧美精品| 日本一欧美一欧美一亚洲视频 | 伊人久久大香线蕉综合四虎小说 | 中文字幕av一区二区三区免费看| 国产精品久久久久久吹潮| 爱福利视频一区二区| 26uuu久久噜噜噜噜| 欧美性猛交xxxx免费看漫画| 三级欧美韩日大片在线看| 欧美videos粗暴| 成人网免费看| 久久国产一区| www国产精品视频| 午夜精品久久久久久久99樱桃| 天堂成人免费av电影一区| 97久久中文字幕| 亚洲综合色视频在线观看| 一区二区三区在线视频看| 国模叶桐国产精品一区| 欧美精品高清视频| 91看片淫黄大片一级在线观看| 欧美gvvideo网站| 婷婷六月国产精品久久不卡| 亚洲精品99久久久久中文字幕| 国产成人综合在线观看| 欧洲grand老妇人| 不卡av免费观看| 日本激情视频网| 高清无码视频直接看| 亚洲一区美女视频在线观看免费| 在线看片第一页欧美| 精品视频999|