国产成人精品亚洲777人妖,欧美日韩精品一区视频,最新亚洲国产,国产乱码精品一区二区亚洲

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

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

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

一 前言

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

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

二 實現方式

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

2.1 被單接口

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

2.2 被單實現類

實現類A

重寫getColor()方法;輸出red

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

實現類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)//創建spring應用上下文@ContextConfiguration(classes= {SheetConfig.class})//加載配置類public class SheetTest { @Autowired Sheet sheet; @Test public void sheetTest(){ // System.out.println(sheet.getColor()); }}

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

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

解決辦法一

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

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

解決辦法二

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

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

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

標簽: Spring
相關文章:
主站蜘蛛池模板: 乐亭县| 景洪市| 安宁市| 华蓥市| 遂平县| 秦皇岛市| 云阳县| 河北区| 洪湖市| 工布江达县| 临湘市| 衡阳县| 大理市| 中山市| 万载县| 阳高县| 宣武区| 荆门市| 龙胜| 尤溪县| 紫金县| 额济纳旗| 阿拉善右旗| 山阴县| 永州市| 景德镇市| 饶平县| 永定县| 紫金县| 鸡东县| 安塞县| 冷水江市| 五莲县| 拜泉县| 扎赉特旗| 礼泉县| 许昌市| 盈江县| 福海县| 洪湖市| 德安县|