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 ""; //方法
}