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

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

瀏覽:3日期: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
相關文章:
国产综合久久一区二区三区