自定义注解标识

1.@Retention

(1) RetentionPolicy.SOURCE:注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃;

(2) RetentionPolicy.CLASS:注解被保留到class文件,但jvm加载class文件时候被遗弃,这是默认的生命周期;

(3) RetentionPolicy.RUNTIME:注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在;

这3个生命周期分别对应于:Java源文件(.java文件) —> .class文件 —> 内存中的字节码。

2.@IntDef 枚举类型

(1) @Target

(2) @Target(ElementType.TYPE) //接口、类、枚举、注解

(3) @Target(ElementType.FIELD) //字段、枚举的常量

(4) @Target(ElementType.METHOD) //方法

(5) @Target(ElementType.PARAMETER) //方法参数

(6) @Target(ElementType.CONSTRUCTOR) //构造函数

(7) @Target(ElementType.LOCAL_VARIABLE)//局部变量

(8) @Target(ElementType.ANNOTATION_TYPE)//注解

(9) @Target(ElementType.package) ///包 这里可以使用多个,比如:@Target({ElementType.TYPE,ElementType.METHOD})

3.@Documented

Documented 注解表明这个注解应该被 javadoc工具记录. 默认情况下,javadoc是不包括注解的.
但如果声明注解时指定了 @Documented,则它会被 javadoc 之类的工具处理, 所以注解类型信息也会被包括在生成的文档中.

4.@Inherited

(1).@Inherited定义在类级别上,子类时可以继承的

(2).@Inherited定义在方法级别上,子类的方法如果复写的那么就不能继承。

例:

@Target({ElementType.PARAMETER, ElementType.METHOD}) //方法或方法参数上 
@Retention(RetentionPolicy.RUNTIME)  //运行时注解
@Documented  
public  @interface SystemLog {  
String module()  default "";  //模块
String methods()  default "";   //方法
}