JAVA自定义注解判断属性是否为空

一、自定义注解

Java

@Target(value=ElementType.FIELD)
@Retention(value = RetentionPolicy.RUNTIME)
public @interface NotNull {
    String message() default "";
}

Target,Retention是元注解,也就是注解的注解
Target:注解的范围,这里选ElementType.FIELD,表示作用在属性上。
Retention:注解的生命周期,RUNTIME代表编译,运行的时候注解都存在,能影响到程序的逻辑。

二、定义注解处理逻辑

Java

public  class ParamsRequired {

    public boolean validate() throws Exception {
        Field[] fields = this.getClass().getDeclaredFields();
        for (Field field : fields) {
            NotNull notNull = field.getAnnotation(NotNull.class);
            if (notNull != null) { 
                Method m = this.getClass().getMethod("get" + getMethodName(field.getName()));
                Object obj=m.invoke(this);
                if (obj==null) {
                    System.err.println(field.getName() +notNull.message());
                    //throw new NullPointerException(notNull.message());
                }
            }
        }
        return true;
    }

    /**
     * 把一个字符串的第一个字母大写
     */
    private String getMethodName(String fildeName) throws Exception {
        byte[] items = fildeName.getBytes();
        items[0] = (byte) ((char) items[0] - 'a' + 'A');
        return new String(items);
    }
}

三、使用注解

Java

public class Car extends ParamsRequired{

    @NotNull(message="名称不能为空")
    private String name;
    @NotNull(message="价格不能为空")
    private Double price;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Double getPrice() {
        return price;
    }
    public void setPrice(Double price) {
        this.price = price;
    }
}

四、测试

Java

public class Test {
    public static void main(String[] args) throws Exception {
        Car car=new Car();
        car.validate();
    }
}

运行结果:

你可能感兴趣的:(Spring学习)