Spring 组合注解&注解继承


  • 管理员

    组合注解

    被注解的注解称为组合注解。

    1.好处

    • 简单化注解配置,用很少的注解来标注特定含义的多个元注解
    • 提供了很好的扩展性,可以根据实际需要灵活的自定义注解。

    2 如何使用

    (1)自定义一个组合注解

    @Target(ElementType.TYPE)
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Configuration //实际上就是一个bean注解
    @ComponentScan//自动扫描对应value(package路径)值下面的所有bean
    public @interface  WiselyConfiguration {
        String[] value() default{};//可以不写,实际在@ComponentScan注解中已经定义过,所以可以拿过来直接用
    }
    

    (2)使用自定义注解

    //@Configuration //属性注解
    //@ComponentScan("com.gdb.spingboot.service")  // 要扫描的bean路径
    @WiselyConfiguration(value = "com.gdb.spingboot.service")  //自定义注解,扫描的所有的bean来源于value值所对应的包路径下
    public class ElConfig{
    }
    

    组合注解,和上面两个注解实现的功能完全一致,所以如果在繁琐的注解被多次使用的情况下,可以考虑自定义组合注解。

    注解继承

    @Inhberited注解可以让指定的注解在某个类上使用后,这个类的子类也将自动被该注解标记。

    @Retention(RetentionPolicy.RUNTIME)
    @Inherited 
    public @interface Hello {
    }
    
    public class AnnotationTest3{
        //在基类上使用被@Inherited标记了的注解@Hello@HelloclassBase{}
        //派生类没有直接注解@HelloclassDerivedextendsBase{}
        public static void main(String[] args){
        //派生类也会自动被注解@Hello标记。if( Derived.class.isAnnotationPresent(Hello.class)){
            Hello hello = (Hello)Derived.class.getAnnotation(Hello.class);
            System.out.println("Hello");
            }
        }
    }
    

    注解的其它事项

    (1)当注解中含有数组属性时,使用{}赋值,各个元素使用逗号分隔。

    (2)注解的属性可以是另外一个注解。

    (3)注解的属性可以是另外一个注解的数组。

    (4)注解的默认属性是value,只有一个value属性时可以不写value=xxx,直接写值即可。

    (5)注解的属性的默认值使用default来定义。

    //定义注解
    @Retention(RetentionPolicy.RUNTIME)
    public @interface SomeFuture {
        String value();//默认的属性int[]  arrayValue(); //数组Hello  helloValue();//是另外一个注解@Hello
        Hello[] helloArrayValue() default {@Hello,@Hello}; //注解的数组,而且提供默认值。
    }
    
    //使用注解
    @SomeFuture(
        value="hello", //默认属性
        arrayValue={1,2,3},//数组属性
        helloValue=@Hello,//属性是另外一个注解
        helloArrayValue={@Hello,@Hello,@Hello}//属性是另外一个注解的数组。
    )
    public class AnnotationTest4{
    }
    

Log in to reply