java注解-原理(元注解 @Target、@Retention、@Documented、@Inherited)

概述

本文通过 java内置注解 理解注解的原理 和 使用

@Override 注解 源码

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override {
}

说明:

  • @Target(ElementType.METHOD) :元注解
  • @Retention(RetentionPolicy.SOURCE) :元注解
  • @interface:定义注解的关键字,从名字可以看出,相当于接口interface

元注解

修饰注解的注解

用于设计自定义注解的

@Target

定义注解修饰的位置。一般多用于修饰 类、方法、变量、参数

定义在 ElementType 类中

public enum ElementType {
    /** 类,接口(包括注解类型)或枚举的声明 */
    TYPE,

    /** 属性的声明 */
    FIELD,

    /** 方法的声明 */
    METHOD,

    /** 方法形式参数声明 */
    PARAMETER,

    /** 构造方法的声明 */
    CONSTRUCTOR,

    /** 局部变量声明 */
    LOCAL_VARIABLE,

    /** 注解类型声明 */
    ANNOTATION_TYPE,

    /** 包的声明 */
    PACKAGE
}

@Retention

描述注解保留的阶段

定义在 RetentionPolicy 类中

public enum RetentionPolicy {
    /**
     * 限定在Java源文件中,相当于注释
     * 不会参与编译,也不会在运行期起任何作用
     */
    SOURCE,

    /**
     * 注解将被编译器记录在class文件中,在编译时根据注解做一些处理动作
     * 但在运行时不会被jvm加载,所以运行期也不会被读取
     * 这是一个默认的行为
     */
    CLASS,

    /**
     * 注解将被编译器记录在class文件中,而且在运行时会被jvm加载,所以通过反射被读取到
     * 自定义注解几乎都是使用的 RUNTIME
     */
    RUNTIME
}

@Documented

指定 自定义注解 是否生成到JavaDoc文档中

@Inherited

指定注解是否被子类继承


原文出处:/show_1IX6Lc274qy.html