java中元注解有四个: @Retention @Target @Document @Inherited;
@Retention
表示在什么级别保存该注解信息
@Retention(RetentionPolicy.SOURCE) //注解仅存在于源码中,在class字节码文件中不包含,(注解将被编译器丢弃)
@Retention(RetentionPolicy.CLASS) // 默认的保留策略,注解会在class字节码文件中存在,但运行时无法获得,(注解在class文件中可用,但会被VM丢弃 )
@Retention(RetentionPolicy.RUNTIME) // 注解会在class字节码文件中存在,在运行时可以通过反射获取到,(VM将在运行期也保留注释)
@Target
注解的作用目标
@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) ///包
@Documented
将此注解包含在 javadoc 中 ,它代表着此注解会被javadoc工具提取成文档。在doc文档中的内容会因为此注解的信息内容不同而不同。相当与@see,@param 等。
@Inherited
允许子类继承父类中的注解。
示例代码
@Documented
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD,ElementType.TYPE})
public @interface Person {
int age() default 20;
String name() default "simons";
}
@Person(age = 25,name = "mike")
public class PersonInfo {
public void getInfo(){
//TODO ……
}
}
参考资料:
https://love1024.blog.csdn.net/article/details/79570578
https://blog.csdn.net/jiuxin_jiuxin/article/details/109849154
https://blog.csdn.net/lkp1603645756/article/details/84072600