Discuss / Java / 使用注解Demo

使用注解Demo

Topic source

张卿长

#1 Created at ... [Delete] [Delete and Lock User]
package AnnotationDemo;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.lang.annotation.Annotation;import java.lang.reflect.Field;public class AnnotationDemo1 {    //初始化slf4j logger实例  用于在后续如果不符合注解 将其打印输出到文件中    static final Logger logger= LoggerFactory.getLogger(AnnotationDemo1.class);    public static void main(String[] args) throws IllegalAccessException {        //虽然在Num类中已经打了注解 但是可以看到注解对于代码逻辑本身并不会产生任何影响        //这时候我们就要自己写方法 首先获取注解 然后完成校验        Num num=new Num("asdf",50);        System.out.println(num.Name);        check(num);    }    //检查Num类的实例 所定义的字段number是否符合要求的注解  min =10  max=40    public static void check(Num num) throws IllegalAccessException {        //通过反射来获取当前num这个实例的注解        //1、获取Class cls        Class cls=num.getClass();        //2、获取到所有的字段        Field[] fields=cls.getFields();        //3、遍历获取到的所有字段        for(Field f:fields){            // 获取Field定义的@Range:            Range range = f.getAnnotation(Range.class);            //如果当前字段确实有range注解            if(range!=null){                //获取当前field 对应到num实例                Object value=f.get(num);                //如果当前value是int类型                if(value instanceof Integer){                    if((Integer)value>= range.min() && (Integer)value <= range.max()){                        logger.info("当前实例的{}符合注解要求",f.getName());                    }                    else{                        logger.error("超出");                    }                }            }        }    }}class Num{    @NotNull    public String Name;    @Range(min=10,max = 40)    public int number;    public  Num(){    }    public Num(String name,int n){        this.Name=name;        this.number=n;    }}

  • 1

Reply