- 自己百度了一圈也没有发现写得简单明了的注解使用跟代码,所以自己就整理写了一套超简单的代码,让初学者可能很快入门,并且了解注解是干嘛的
- 读取注解的主要方式getAnnotations() 分别是class类、Method(读取类中的方法)、Field类(读取类中的所有变量)
项目应用场景
- 导出Excel 作者:ThinkGem,Jeesite框架
- 数据验证 hibernate的数据验证
- 方法跟变量说明(比如说前端要使用这个说明并进行只能提示)spiderflow爬虫框架中
自定义注解类
关于头部的几个注解,就自行百度,大致意思就是控制这个注解是注解到 方法、类、变量等~~~
package com.test.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
/**
* 自定义注解类
*
* @author 86517
*
*/
@Documented
@Retention(RetentionPolicy.RUNTIME)
// @Target(ElementType.ANNOTATION_TYPE)
public @interface Comment {
String value() default "";
String name() default "";
int max() default 0;;
int min() default 0;;
}
实体类
package com.test.e;
import com.test.annotation.Comment;
@Comment("注解在类上")
public class Executors {
@Comment(value = "注解在变量上value", name = "注解在变量上")
private int tst;
@Comment("注解在方法上")
public static void name() {
}
@Comment(value = "注解在get方法上", max = 100)
public int getTst() {
return tst;
}
@Comment("注解在set方法上")
public void setTst(int tst) {
this.tst = tst;
}
}
- 读取注解信息,简单实现数据验证原理 hibernate也有一个注解验证ps:可能原理也都差不多,
package com.test.main;
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import com.test.annotation.Comment;
import com.test.e.Executors;
public class Main {
public static void main(String[] args) throws Exception {
// 读取类上的注解
Annotation[] a = Executors.class.getAnnotations();
// 读取注解
Comment comment = Executors.class.getAnnotation(Comment.class);
System.out.println(comment.value());
for (Annotation annotation : a) {
System.out.println(annotation);
}
// 读取这个类上的所有方法上的注解
Method[] b = Executors.class.getDeclaredMethods();
for (Method method : b) {
// 读取注解
Comment commentMethod = method.getAnnotation(Comment.class);
System.out.println(commentMethod.value());
for (Annotation annotation : method.getAnnotations()) {
System.out.println(annotation);
}
}
// 读取这个类上所有的变量上的注解
Field[] c = Executors.class.getDeclaredFields();
for (Field field : c) {
// 读取注解
Comment commentField = field.getAnnotation(Comment.class);
System.out.println(commentField.value() + "=============" + comment.name());
for (Annotation annotation : field.getAnnotations()) {
System.out.println(annotation);
}
}
// 实战演练
// 验证数据值是否大于注解的值
// max注解值=100
// 读取这个类上的所有方法上的注解
Executors executors = new Executors();
executors.setTst(1000);
Field[] c1 = executors.getClass().getDeclaredFields();
for (Field field : c1) {
// 读取注解
Comment commentField = field.getAnnotation(Comment.class);
System.out.println(commentField.value() + "=============" + comment.name());
for (Annotation annotation : field.getAnnotations()) {
System.out.println(annotation);
}
if (commentField.max() < executors.getTst()) {
System.out.println("验证不通过");
}
}
}
}