目录
前言
注解是JAVA提供的设置程序中元素的关联信息和元数据的方法,它是一个接口,声明的关键字是 “@interface”,也可以说是一个特殊的Java类型。
在程序中,可以通过反射来获取指定程序中的注解对象,然后通过该注解对象来获取注解中的元数据信息。
一、Java中的元注解
JAVA从JDK5.0开始加入了注解,提供了几种元注解,即用来描述注解信息的注解。分别如下:
@Target
@Target用来描述注解修饰的范围,注解可被用于包、类型(class/interface/enum/注解等)、成员变量、方法等
@target注解的取值分析 序号 名称 修饰目标 1 TYPE 用于描述类、接口、或枚举等 2 FIELD 用于描述域(成员变量) 3 METHOD 用于描述方法 4 PARAMETER 用于描述参数 5 CONSTRUCTOR 用于描述构造器 6 LOCAL_VARIABLE 用于描述局部变量 7 ANNOTATION_TYPE 用于描述注解 8 PACKAGE 用于描述包 9 TYPE_PARAMETER 用于普通变量的声明 10 TYPE_USE
能标注任何类型的名称
@Retention
@Retention 用来定义该注解的保留级别,即在什么时候有效,有下面三种类型
名称 值 SOURCE 在源文件种有效 CLASS 在class文件中有效 RUNTIME 在运行时有效 PS:一般 RUNTIME的使用场景最多。
@Documented
@Documented声明这个注解被Javadoc工具记录,可以被文档化
@Inherited
@Inherited是一个标记注解,表明这个注解可以被继承,例如如果一个标注了@Inherited的注解被使用于一个类,那么他的子类也继承了这个注解。
二、创建JAVA自定义注解
Java除了可以使用默认的注解以外,还可以自定义注解来使用。
1.声明一个注解
代码如下:
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* 自定义注解.
*
* @author linzp
* @version 1.0.0
* CreateDate 2020/9/30 15:52
*/
@Target(ElementType.FIELD) //这里表明注解用于字段上
@Retention(RetentionPolicy.RUNTIME) //保留到运行时,可以通过注解获取
public @interface MyAnnotation {
//字段描述
String description();
//字段长度
int length();
}
这个注解用于描述字段的信息,有两个方法,一个用来描述字段的信息,一个用来描述字段的长度。
2.使用该注解
编写一个类来使用该注解,代码如下 :
import java.lang.reflect.Field;
/**
* 测试使用自定义注解.
*
* @author linzp
* @version 1.0.0
* CreateDate 2020/9/30 15:55
*/
public class AnnotationDemo {
/**
* 描述字段信息.
*/
@MyAnnotation( description = "用户名称", length = 6)
private static String name;
private String email;
public static void main(String[] args) {
//反射获取类模板
Class c = AnnotationDemo.class;
//获取所有字段
Field[] declaredFields = c.getDeclaredFields();
//遍历所有字段
for(Field f : declaredFields){
//判断这个字段是否有自定义的注解
if (f.isAnnotationPresent(MyAnnotation.class)){
//获取注解信息
MyAnnotation annotation = f.getAnnotation(MyAnnotation.class);
//打印
System.out.println("字段名:"+f.getName()
+ " 字段描述:"+annotation.description()
+ " 字段长度:"+annotation.length());
}
}
}
}
输出结果如下:
字段名:name 字段描述:用户名称 字段长度:6
这里使用了反射来获取类对象信息,并且获取该类的所有字段,判断字段上是否有使用自定义的注解,如果有的话,获取该注解的值并打印出来。
总结
本文主要介绍了Java的元注解和如何来自定义一个注解并解析。下次介绍自定义注解的使用场景,和使用反射解析注解的相关方法。