AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當前位置:首頁 > 科技  > 軟件

Spring注入還可以這樣玩!漲知識了

來源: 責編: 時間:2024-05-17 17:48:25 183觀看
導讀環境:Spring6.1.21. 簡介@Qualifier是 Spring 框架中的一個注解,它用于消除自動裝配(autowiring)時的歧義。在 Spring 應用程序中,當存在多個相同類型的 bean 時,自動裝配可能會產生歧義,因為 Spring 容器不知道該選擇哪個 b

環境:Spring6.1.2y8828資訊網——每日最新資訊28at.com

1. 簡介

@Qualifier是 Spring 框架中的一個注解,它用于消除自動裝配(autowiring)時的歧義。在 Spring 應用程序中,當存在多個相同類型的 bean 時,自動裝配可能會產生歧義,因為 Spring 容器不知道該選擇哪個 bean 進行注入。這時,我們可以使用 @Qualifier 注解來明確指定要注入的 bean。y8828資訊網——每日最新資訊28at.com

假設你有兩個 CommonDAO bean,每個都需要在不同的環境中使用。這時,你可以使用 @Qualifier 來指定具體的 bean。y8828資訊網——每日最新資訊28at.com

public class CommonService {  @Resource  @Qualifier  private CommonDAO dao ;}@Configurationpublic class AppConfig {  @Bean  @Qualifier  public TeacherDAO teacherDAO() {    return new TeacherDAO() ;  }  @Bean  public StudentDAO studentDAO() {    return new StudentDAO() ;  }  @Bean  public CommonService commonService() {    return new CommonService() ;  }}

上面示例中如果注入的CommonDAO字段上沒有添加@Qualifier注解,那么程序將會報錯,這里通過@Qualifier注解來限定注入的值;該注解也可以設置value屬性。y8828資訊網——每日最新資訊28at.com

2. 更多玩法

上面直接通過使用@Qualifier注解來限定注入值,接下來將介紹其它的使用方法。y8828資訊網——每日最新資訊28at.com

2.1 自定義限定注解

@Target({ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)@Qualifierpublic @interface Pack {  String value();}

自定義限定注解,該注解上使用了@Qualifier注解。接下來我們就可以使用該注解。y8828資訊網——每日最新資訊28at.com

public class CommonService {  @Resource  @Pack  private CommonDAO dao ;}@Bean@Packpublic TeacherDAO teacherDAO() {  return new TeacherDAO() ;}

這時候你就可以自定義不同的注解分別標準你要注入的值。y8828資訊網——每日最新資訊28at.com

2.2 泛型限定注入

有如下接口定義,該接口是泛型接口:y8828資訊網——每日最新資訊28at.com

public class Teacher {}public class Student {}public interface CommonDAO<T> {}public class TeacherDAO implements CommonDAO<Teacher> {}public class StudentDAO implements CommonDAO<Student> {}public class CommonService {  @Resource  private CommonDAO<Student> dao ;  @Override  public String toString() {    return "CommonService [dao=" + dao + "]";  }}

在上面CommonDAO的注入中如果你泛型使用的Student那么注入的將是StudentDAO,如果是Teacher類型,那么注入的將是TeacherDAO。y8828資訊網——每日最新資訊28at.com

泛型限定符也可用于List、Map 實例和數組。如下使用List示例:y8828資訊網——每日最新資訊28at.com

@Resourceprivate List<CommonDAO<Student>> daos ;

這將注入容器中所有泛型是Student類型的CommonDAO實例對象。y8828資訊網——每日最新資訊28at.com

2.3 完全自定義注解

有如下注解,我們完全可以不依賴任何Spring相關的注解實現限定的注入值。y8828資訊網——每日最新資訊28at.com

@Target({ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)public @interface Pack {  String value() default "" ;}

該自定義注解并沒有使用Spring的@Qualifier注解。要使得上面注解生效你還需要配置如下類:y8828資訊網——每日最新資訊28at.com

@Beanpublic CustomAutowireConfigurer customAutowireConfigurer() {  CustomAutowireConfigurer autowireConfigurer = new CustomAutowireConfigurer() ;  // 指定我們自定義的注解  autowireConfigurer.setCustomQualifierTypes(Set.of(Pack.class)) ;  return autowireConfigurer ;}

CustomAutowireConfigurer是BeanFactoryPostProcessor,這會幫助我們注冊自定義的限定注解。y8828資訊網——每日最新資訊28at.com

2.4 更多屬性控制

除了上面的方式限定注入的值,我們還可以自定義注解,指定更多的屬性值去匹配bean對象,只有bean對象具有相同的屬性值(元數據信息)才能匹配。y8828資訊網——每日最新資訊28at.com

public enum Format {  JSON, CSV, PLAIN}@Target({ElementType.TYPE, ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)@Qualifierpublic @interface Pack {  String value() default "" ;  // 指定格式  Format format() ;}// Bean定義指定每一種bean對應的格式format@Pack(format = Format.CSV)public class CSVDAO implements CommonDAO {}@Pack(format = Format.JSON)public class JSONDAO implements CommonDAO {}

接下來在注冊上面兩個*DAO bean時就不能通過注解的方式了,只能通過xml或者BeanDefinition的方式注冊,如下示例:y8828資訊網——每日最新資訊28at.com

ApplicationContext context = ... ;// 分別設置他們的元數據信息。context.registerBean(CSVDAO.class, bd -> {  bd.setAttribute("format", "CSV") ;});context.registerBean(JSONDAO.class, bd -> {  bd.setAttribute("format", "JSON") ;});

注入配置:y8828資訊網——每日最新資訊28at.com

@Resource@Pack(format = Format.JSON)private CommonDAO dao ;

通過上面指定format屬性,以確定需要注入對象的明確要求。y8828資訊網——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-88932-0.htmlSpring注入還可以這樣玩!漲知識了

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 精通Python單元測試:掌握Unittest模塊的終極指南

下一篇: 聊聊樂觀鎖與悲觀鎖

標簽:
  • 熱門焦點
  • 盧偉冰長文解析K60至尊版 對Redmi有著里程碑式的意義

    在今天的Redmi后性能時代戰略發布會結束之后,Redmi總經理盧偉冰又帶來了一篇長文,詳解了為什么 Redmi 要開啟后性能時代?為什么選擇和 MediaTek、Pixelworks 深度合作?以及后性
  • Mate60手機殼曝光 致敬自己的經典設計

    8月3日消息,今天下午博主數碼閑聊站帶來了華為Mate60的第三方手機殼圖,可以讓我們在真機發布之前看看這款華為全新旗艦的大致輪廓。從曝光的圖片看,Mate 60背后攝像頭面積依然
  • 5月安卓手機好評榜:魅族20 Pro奪冠

    性能榜和性價比榜之后,我們來看最后的安卓手機好評榜,數據來源安兔兔評測,收集時間2023年5月1日至5月31日,僅限國內市場。第一名:魅族20 Pro好評率:97.50%不得不感慨魅族老品牌還
  • 帥氣純真少年!日本最帥初中生選美冠軍出爐

    日本第一帥哥初一生選美大賽冠軍現已正式出爐,冠軍是來自千葉縣的宗田悠良。日本一直熱衷于各種選美大賽,從&ldquo;最美JK&rdquo;起到&ldquo;最美女星&r
  • 19個 JavaScript 單行代碼技巧,讓你看起來像個專業人士

    今天這篇文章跟大家分享18個JS單行代碼,你只需花幾分鐘時間,即可幫助您了解一些您可能不知道的 JS 知識,如果您已經知道了,就當作復習一下,古人云,溫故而知新嘛?,F在,我們就開始今
  • 三分鐘白話RocketMQ系列—— 如何發送消息

    我們知道RocketMQ主要分為消息 生產、存儲(消息堆積)、消費 三大塊領域。那接下來,我們白話一下,RocketMQ是如何發送消息的,揭秘消息生產全過程。注意,如果白話中不小心提到相關代
  • 大廠卷向扁平化

    來源:新熵作者丨南枝 編輯丨月見大廠職級不香了。俗話說,兵無常勢,水無常形,互聯網企業調整職級體系并不稀奇。7月13日,淘寶天貓集團啟動了近年來最大的人力制度改革,目前已形成一
  • ESG的面子與里子

    來源 | 光子星球撰文 | 吳坤諺編輯 | 吳先之三伏大幕拉起,各地高溫預警不絕,但處于厄爾尼諾大&ldquo;烤&rdquo;之下的除了眾生,還有各大企業發布的ESG報告。ESG是&ldquo;環境保
  • Meta盲目擴張致超萬人被裁,重金押注元宇宙而前景未明

    圖片來源:圖蟲創意日前,Meta創始人兼CEO 馬克&middot;扎克伯發布公開信,宣布Meta計劃裁員超11000人,占其員工總數13%。他公開承認了自己的預判失誤:&ldquo;不僅
Top