- 自定义注解(自己定义个注解类)可做几方面使用:
- 作为注释使用(与doc注释作用一样:/** asdfghj */);
- 参与代码逻辑(一般通过获取注解的内容后,将注解的value参与代码逻辑)
- 规范代码格式编写,在编译阶段排除不必要错误(意思就是在idea中写代码时不报红线线错误。。。)
- 自定义注解分几个级别属性:运行时级别RententionPolicy.RUNTIME、字节码级别RententionPolicy.CLASS、源码级别RententionPolicy.SOURCE
- 自定义注解分几个作用范围:类上边ElementType.TYPE、方法上边ElementType.METHOD、字段上边ElementType.FIELD等等(还有其他)
- 自定义注解使用场景:(在csdn编辑器中纯手敲,运行不出来需要自己调试下哈)
- 定义一个注解:(用@interface 类型关键字定义):
/**
* 定义 注解于类上边的注解
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface ClassAno{
int value();
String describe();
String scope();
}
/**
* 定义 注解于字段上边的注解
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface FieldAno{
int value();
String describe();
String scope();
}
- 编写被注解的测试类
/**
* 自定义注解测试
*
*/
@ClassAno(value = 1, describe = "自定义注解测试类", scope = "CLASS")
public class AnoTest{
@FieldAno(value = 2, describe = "姓名", scope = "FIELD")
private String name;
}
- 获取注解信息(注解内容参与代码逻辑部分)
/**
* 自定义注解使用场景测试
*/
public class test{
public static void main(String[] args){
AnoTest anoTest = new AnoTest();
Class<?> clazz = anoTest.getClass();
ClassAno classAno = clazz.getAnnotation(ClassAno.class);
System.out.println(classAno.value() + classAno.describe() + classAno.scope());
Field[] fields = org.apache.commons.lang3.reflect.FieldUtils
.getAllFields(request.getClass());
Field field = fields[0];
FieldAno fieldAno = field.getAnnotation(FieldAno.class);
System.out.println(fieldAno.value() + fieldAno.describe() + fieldAno.scope());
}
}
附件:概念图(声明:该图是网上找的,如有侵权,联系我删除):