美文网首页
spring注解@interface

spring注解@interface

作者: syxyabc | 来源:发表于2019-09-28 19:42 被阅读0次

    在写注解的时候,发现注解上面还有4个注解:
    1.@Target: 用来描述注解使用范围
    2.@Retention:用来描述在什么时期使用
    3.@Documented:表示注解是否可以用到api文档中
    4.@ Inherited:表示注解是否具备可继承性,可继承意思是,如果父类有该注解,则子类也继承这个注解。通过反射获取子类时,也能获取到该注解。这一点在写aop切面时,还是挺有用的,可以判断是否拥有注解。

    @Target 其源码如下

        /**
         * Returns an array of the kinds of elements an annotation type
         * can be applied to.
         * @return an array of the kinds of elements an annotation type
         * can be applied to
         */
        ElementType[] value();
    }
    

    里面是一个ElementTypede 枚举类,该枚举类如下:

    public enum ElementType {
        /** Class, interface (including annotation type), or enum declaration ,类,接口或者是枚举类
    */
        TYPE,
    
        /** Field declaration (includes enum constants) 字段属性*/
        FIELD,
    
        /** Method declaration 方法*/
        METHOD,
    
        /** Formal parameter declaration 参数*/
        PARAMETER,
    
        /** Constructor declaration 构造方法*/
        CONSTRUCTOR,
    
        /** Local variable declaration 局部变量*/
        LOCAL_VARIABLE,
    
        /** Annotation type declaration 注解*/
        ANNOTATION_TYPE,
    
        /** Package declaration 包*/
        PACKAGE,
    
        /**
         * Type parameter declaration
         *
         * @since 1.8
         */
        TYPE_PARAMETER 参数类型【形式参数类型】,
    
        /**
         * Use of a type
         *
         * @since 1.8,任意地方
         */
        TYPE_USE
    }
    

    @ Retention

    public enum RetentionPolicy {
        /**
         * 注释只在源代码级别保留,编译时被忽略
         */
        SOURCE,
        /**
         * 注释将被编译器在类文件中记录
         * 但在运行时不需要JVM保留。这是默认的
         * 行为.
         */
        CLASS,
        /**
         *注释将被编译器记录在类文件中
         *在运行时保留VM,因此可以反读。
         * @see java.lang.reflect.AnnotatedElement
         */
        RUNTIME
    }
    

    相关文章

      网友评论

          本文标题:spring注解@interface

          本文链接:https://www.haomeiwen.com/subject/rojtpctx.html