注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。

作用分类:

①编写文档:通过代码里标识的元数据生成文档【生成文档doc文档】

② 代码分析:通过代码里标识的元数据对代码进行分析【使用反射】

③编译检查:通过代码里标识的元数据让编译器能够实现基本的编译检查【Override】

语法:

@Target({ElementType.FIELD})    //作用目标

@Retention(RetentionPolicy.RUNTIME)   //保留

@Inherited             //允许子类继承,可以不加

@Documented           //注解应该被 javadoc工具记录,可以不加

public @interface ChineseName {    public String value();}

JAVA注解 JAVA自定义注解

作用目标

ElementType.CONSTRUCTOR         构造方法声明

ElementType.FIELD               字段声明

ElementType.LOCAL_VARIABLE      局部变量申明

ElementType.METHOD              方法声明

ElementType.PACKAGE             包声明

ElementType.PARAMETER           参数声明

ElementType.TYPE                类接口

JAVA注解 JAVA自定义注解

保留

RetentionPolicy.SOURCE        只在源码显示,编译时会丢弃

RetentionPolicy.CLASS         编译时会记录到class中,运行时忽

RetentionPolicy.RUNTIME       运行时存在,可以通过发射读取

JAVA注解 JAVA自定义注解

这里以注解作用目标在属性上,运行时存在

JAVA注解 JAVA自定义注解

新增一个Person实体,将注解放在name上

JAVA注解 JAVA自定义注解

通过反射获取注解值

JAVA注解 JAVA自定义注解

关键代码

@Target({ElementType.FIELD})

@Retention(RetentionPolicy.RUNTIME)

public @interface ChineseName {

    public String value();

}

测试方法

@Test

    public void testName() throws Exception {

         Person person = new Person();

         Class clazz = person.getClass();

         Field field = clazz.getDeclaredField("name");

         ChineseName annotation = field.getAnnotation(ChineseName.class);

         System.out.println(annotation.value());

    }

 

参考文章:https://jingyan.baidu.com/article/a65957f43d5d0324e77f9b50.html

 

相关文章: