• (九) spring 使用自定义限定符注解


    案例一

    • 定义接口  CD.java
    package interfacepackage;
    
    public interface CD {
        void play();
    }
    • 定义接口 player .java
    package interfacepackage;
    
    //定义一个播放器接口
    public interface player {
        void play();
    }
    • 定义接口的实现类   CD1.java
    package bean;
    
    import org.springframework.stereotype.Component;
    
    import annotation_self.CD1_Annotation;
    import annotation_self.CD_Annotation;
    import interfacepackage.CD;
    @Component
    @CD_Annotation    //使用自定义限定符来标识这个bean,类似于bean的id
    @CD1_Annotation //使用自定义限定符来标识这个bean,类似于bean的id
    public class CD1  implements CD{
    
        @Override
        public void play() {
            System.out.println("我是 CD1");
            
        }
        
    }
    • 定义接口的实现类   CD2.java
    package bean;
    
    import org.springframework.stereotype.Component;
    
    import annotation_self.CD2_Annotation;
    import annotation_self.CD_Annotation;
    import interfacepackage.CD;
    @Component
    @CD_Annotation  //使用自定义限定符来标识这个bean,类似于bean的id属性
    @CD2_Annotation //使用自定义限定符来标识这个bean,类似于bean的id属性
    public class CD2  implements CD{
    
        @Override
        public void play() {
            System.out.println("我是 CD2");
            
        }
        
    }
    • 定义接口的实现类 CDPlayer.java
    package bean;
    
    import interfacepackage.CD;
    import interfacepackage.player;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Component;
    
    import annotation_self.CD2_Annotation;
    import annotation_self.CD_Annotation;
    
    @Component("cdp")
    public class CDPlayer implements player {
    
        @Autowired
        @CD_Annotation  
        @CD2_Annotation  //表示注入的bean的限定符必须有@CD_Annotation和@CD2_Annotation
        private CD cd;
    
        @Override
        public void play() {
    
            cd.play();
        }
    
    }
    • 定义配置类 CDPlayerConfig.java
    package config;
    
    import interfacepackage.CD;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.context.annotation.Configuration;
    
    import bean.CDPlayer;
    
    @Configuration
    @ComponentScan(basePackages="bean")
    public class CDPlayerConfig {
    
    }
    • 自定义注解限定符  CD_Annotation .java
    package annotation_self;
    
    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.CONSTRUCTOR,ElementType.FIELD,ElementType.METHOD,ElementType.TYPE})  //该自定义注解限定符的作用目标
    @Retention(RetentionPolicy.RUNTIME)
    @Qualifier   //说明这是个自定义限定符
    public @interface CD_Annotation {
    
    }
    • 自定义注解限定符  CD1_Annotation .java
    package annotation_self;
    
    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.CONSTRUCTOR,ElementType.FIELD,ElementType.METHOD,ElementType.TYPE})  //该自定义注解限定符的作用目标
    @Retention(RetentionPolicy.RUNTIME)
    @Qualifier   //说明这是个自定义限定符
    public @interface CD1_Annotation {
    
    }
    • 自定义注解限定符  CD2_Annotation .java
    package annotation_self;
    
    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.CONSTRUCTOR,ElementType.FIELD,ElementType.METHOD,ElementType.TYPE})  //该自定义注解限定符的作用目标
    @Retention(RetentionPolicy.RUNTIME)
    @Qualifier  //说明这是个自定义限定符
    public @interface CD2_Annotation {
    
    }
    • 编写测试类 Test.java
    package test;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.annotation.AnnotationConfigApplicationContext;
    
    import config.CDPlayerConfig;
    import bean.CDPlayer;
    
    public class Test {
        public static void main(String[] args) {
            
            ApplicationContext context=new AnnotationConfigApplicationContext(CDPlayerConfig.class);
            CDPlayer cdplayer=(CDPlayer)context.getBean("cdp");
            cdplayer.play();
            
            
        }
    }

    结果:

  • 相关阅读:
    龌龊的新版weiphone。
    【爆牙游记】黄山归来不看岳-走进新时代。
    我只有两天。
    聪明的苹果——iPhone 3GS。
    今天,遗憾。
    为了忘却的纪念——写给《博客园精华集Web标准之道》
    剪我一根头发,就要做我一天女人。
    产品重构。
    8月9日和妈妈的对话。
    钻石环。
  • 原文地址:https://www.cnblogs.com/shyroke/p/6862574.html
Copyright © 2020-2023  润新知