国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Spring自定義裝配

2019-11-09 18:56:24
字體:
來源:轉載
供稿:網友

SPRing4.0允許我們使用自定義的限定注解,現在我們有一個Disk接口,兩個實現類JayDiskImpl 和TomDiskImpl,現在我們要在CtBean中自動注入Disk 的實例,因為有兩個實現類,使用@Autowired 是會報錯的(沒有加限定符注解的話,注入的實例默認只能有一個實現,大于一個會報錯),如果我們不自己實現可以使用@Autowired @Qualifier("jayDiskImpl"),或者@Autowired @Qualifier("tomDiskImpl") 或者@Resource(name="jayDiskImpl") 這些都能幫我們精確定位到具體要注入哪一個接口的實現

bean。。 那如何通過自己定義的注解來具體定位到我們所需要的bean實例

以下是簡單的測試例子

目錄:

javaConfig:

[html] view plain copy 在CODE上查看代碼片package test;    import org.springframework.context.annotation.ComponentScan;  import org.springframework.stereotype.Component;    @ComponentScan  @Component  public class JavaConfig {    }  Disk:

[html] view%20plain copy package test;    public interface Disk {      void play();  }  JayDiskImpl:

[html] view%20plain copy package test;    import org.springframework.stereotype.Component;    import soundsystem.DiskInterface;    @Component  @Jay  public class JayDiskImpl implements DiskInterface, Disk {        public void play() {          System.out.println("cd 1");        }    }  TomDiskImpl:

[html] view%20plain copy package test;    import org.springframework.stereotype.Component;    @Component  @Tom //這個地方一定要加這個自定義注解(類似于spring框架的@Qualifier相當于給這個bean指定具體  //的名字),換句話說相當于給當前bean指定名稱以便注入引用它,類似@Component("xx")或者   //@Component @Qualifier("xx")(這兩個注解合起來用等價于==@Component("xx"))  public class TomDiskImpl implements Disk {        public void play() {          System.out.println("cd 2");        }    }  Jay:

[html] view%20plain copy package test;    import java.lang.annotation.Documented;  import java.lang.annotation.ElementType;  import java.lang.annotation.Retention;  import java.lang.annotation.RetentionPolicy;  import java.lang.annotation.Target;    import org.springframework.beans.factory.annotation.Qualifier;    @Target({ElementType.TYPE,ElementType.METHOD,ElementType.FIELD})  @Retention(RetentionPolicy.RUNTIME)  @Documented  @Qualifier  public @interface Jay {    }  Tom:

[html] view%20plain copy package test;    import java.lang.annotation.Documented;  import java.lang.annotation.ElementType;  import java.lang.annotation.Retention;  import java.lang.annotation.RetentionPolicy;  import java.lang.annotation.Target;    import org.springframework.beans.factory.annotation.Qualifier;    @Target({ElementType.TYPE,ElementType.METHOD,ElementType.FIELD})  @Retention(RetentionPolicy.RUNTIME)  @Documented  @Qualifier//通過在定義時添加@Qualifier注解,它們就具有了@Qualifier注解的特性。  //它們本身實際上就成為了限定符注解。  public @interface Tom {  //Tom這個自定義注解,相當于是換了我們自己要的名字的@Qualifier注解  }  CtBean:

[html] view%20plain copy package test;    import org.springframework.beans.factory.annotation.Autowired;  import org.springframework.stereotype.Component;    @Component  public class CtBean {      @Autowired      @Tom      private Disk di;            public void testAno(){          di.play();      }    }  Test:

[html] view%20plain copy 派生到我的代碼片package test;    import org.springframework.context.annotation.AnnotationConfigapplicationContext;    public class Test {            public static void main(String[] args) {                    AnnotationConfigApplicationContext ac =                  new AnnotationConfigApplicationContext(JavaConfig.class);          CtBean ct=ac.getBean("ctBean", CtBean.class);          ct.testAno();                          }    }  輸出:cd 2
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 方山县| 虹口区| 稷山县| 定兴县| 西丰县| 祥云县| 滨州市| 仙居县| 普格县| 红桥区| 乌苏市| 绥芬河市| 方城县| 荥经县| 高台县| 高阳县| 东源县| 阳春市| 赤峰市| 三台县| 万盛区| 西乌珠穆沁旗| 伊通| 彰化市| 临潭县| 陆良县| 棋牌| 宁城县| 嫩江县| 荥阳市| 北流市| 天全县| 连云港市| 江油市| 西平县| 南木林县| 鄄城县| 揭阳市| 和田市| 东海县| 嘉禾县|