Java注解
注解 | Annotation
Annotation就是代码里的特殊标记,这些标记可以在编译期、类加载期和运行时 被读取,并执行相应的处理。通过使用Annotation,程序员可以在不改变代码原有逻辑的前提下,在源文件中嵌入一些补充信息。
Annotation可以像修饰符一样被使用,可用于修饰 包、类、构造器、方法、成员变量、方法参数、局部变量 的声明,这些信息被保存在Annotation的"name = value"
键值对中。
元注解
元注解的作用就是负责定义其他注解,Java定义了4个标准的meta-annotation
元注解类型,它们用于提供对其他annotation
类型进行说明,这些元注解都在java.lang.annotation
包中。
@Target:用于修饰一个Annotation的作用目标,用于描述注解的使用范围。
@Target(ElementType.TYPE) – 接口、类、枚举、注解
@Target(ElementType.FIELD) – 字段、枚举的常量
@Target(ElementType.METHOD) – 方法
@Target(ElementType.PARAMETER) – 方法参数
@Target(ElementType.CONSTRUCTOR) – 构造函数
@Target(ElementType.LOCAL_VARIABLE) – 局部变量
@Target(ElementType.ANNOTATION_TYPE) – 注解
@Target(ElementType.PACKAGE) – 包
@Retention : 用于修饰一个Annotation的声明周期,@Retention包含一个RetentionPolicy类型的成员变量,使用@Retention时必须为该value成员变量指定值。
RetentionPolicy.SOURCE : 在源文件中有效(即源文件保留),编译器直接丢弃这种策略的注解;
RetentionPolicy.CLASS【默认值】 : 在class文件中有效(即class保留),当运行Java程序时,JVM不会保留注解;
RetentionPolicy.RUNTIME : 在运行时有效(即运行时保留),当运行Java程序时,JVM会保留注解,程序可以通过反射获取注解的内容;
Source(源代码) < Class(类) < Runtime(运行时)
@Retention:注解的保留位置
- @Retention(RetentionPolicy.SOURCE) //注解仅存在于源码中,在class字节码文件中不包含;
- @Retention(RetentionPolicy.CLASS) // 默认的保留策略,注解会在class字节码文件中存在,但运行时无法获得;
- @Retention(RetentionPolicy.RUNTIME) // 注解会在class字节码文件中存在,在运行时可以通过反射获取到;
@Document : 说明该注解将被包含在javadoc中
@Inherited : 子类可以继承父类的注解
todo…