久久r热视频,国产午夜精品一区二区三区视频,亚洲精品自拍偷拍,欧美日韩精品二区

您的位置:首頁技術文章
文章詳情頁

Spring @Primary和@Qualifier注解原理解析

瀏覽:11日期:2023-09-10 13:22:46

一 前言

本篇內容主要是講解2個重要的注解使用方式和場景,@Primary,@Qualifier注解;其作用就是消除bean注入時的歧義,能夠讓spring容器知道加載哪個bean;

知識追尋者(Inheriting the spirit of open source, Spreading technology knowledge;)

二 實現(xiàn)方式

如下示例中使用被單接口Sheet, 實現(xiàn)類為SheetA , SHeetB ; 由于注入容器時都是 Sheet類型,會發(fā)生異常,此時就是使用@Primary或者@Qualifier對注入的bean進行限制,即可實現(xiàn)正常注入;

2.1 被單接口

/** * @Author lsc * <p> 被單</p> */public interface Sheet { String getColor();}

2.2 被單實現(xiàn)類

實現(xiàn)類A

重寫getColor()方法;輸出red

/** * @Author lsc * <p> </p> */public class SheetA implements Sheet { public String getColor() { return 'red'; }}

實現(xiàn)類B

重寫getColor()方法;輸出pink

/** * @Author lsc * <p> </p> */public class SheetB implements Sheet { public String getColor() { return 'pink'; }}

2.3 配置類

@Configurationpublic class SheetConfig { @Bean public Sheet sheetA(){ return new SheetA(); } @Bean public Sheet sheetB(){ return new SheetB(); }}

2.4 測試類

/** * @Author lsc * <p> </p> */@RunWith(SpringJUnit4ClassRunner.class)//創(chuàng)建spring應用上下文@ContextConfiguration(classes= {SheetConfig.class})//加載配置類public class SheetTest { @Autowired Sheet sheet; @Test public void sheetTest(){ // System.out.println(sheet.getColor()); }}

測試會報異常,原因是向spring容器注入了2個Sheet,無法區(qū)分是SheetA 還是 SheetB,所以會造成bean的歧義問題;

Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException:

解決辦法一

在注入的bean上添加@Primary注解;示例如下,此時向sheetB上添加@Primary注解,spring掃碼注入bean時優(yōu)先注入帶有@Primary注解的bean;測試輸出結果為pink

@Bean@Primarypublic Sheet sheetB(){return new SheetB();}

解決辦法二

注入bean時添加@Qualifier注解,限定注入的Bean;此時輸出就是red

@Qualifier('sheetA')//限定注入Bean ID@AutowiredSheet sheet;

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標簽: Spring
相關文章:
主站蜘蛛池模板: 杭锦后旗| 新河县| 朝阳市| 仁寿县| 泰兴市| 吉安市| 抚州市| 万载县| 普兰店市| 勃利县| 灵台县| 普安县| 方城县| 五原县| 叶城县| 汉阴县| 芦溪县| 澳门| 山西省| 永年县| 都江堰市| 彰武县| 虹口区| 贞丰县| 资中县| 思茅市| 铜梁县| 通化市| 池州市| 来安县| 新宁县| 沙洋县| 嘉义市| 社旗县| 罗平县| 涡阳县| 南和县| 达拉特旗| 龙山县| 卢龙县| 金阳县|