@Target:描述注解作用的目标,比如作用于字段还是方法,比如下面几个常用的类型:
ElementType.TYPE:作用于类和接口
ElementType.FIELD:作用于字段
ElementType.METHOD:作用于方法
@Retention:注解的生命周期:
RetentionPolicy.SOURCE:编译期可见,不会写入 class 文件,通常用于 apt 编译时自动生成代码
RetentionPolicy.CLASS:类加载阶段丢弃,会写入 class 文件,运行时不可见
RetentionPolicy.RUNTIME:永久保存,运行时可以反射获取