您好,登錄后才能下訂單哦!
這篇文章主要講解了Spring @Primary和@Qualifier注解的用法,內容清晰明了,對此有興趣的小伙伴可以學習一下,相信大家閱讀完之后會有幫助。
一 前言
本篇內容主要是講解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 配置類
@Configuration public 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
@Primary
public Sheet sheetB(){
return new SheetB();
}
解決辦法二
注入bean時添加@Qualifier注解,限定注入的Bean;此時輸出就是red
@Qualifier("sheetA")//限定注入Bean ID
@Autowired
Sheet sheet;
看完上述內容,是不是對Spring @Primary和@Qualifier注解的用法有進一步的了解,如果還想學習更多內容,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。