JDK1.5及以后版本引入的java自定义注解,可以应用到反射中,比如自己写个小框架。如实现实体类某些属性不自动赋值,或者验证某个对象属性完整性等,下面具体说说使用注解对实体数据进行非空校验的过程。
1. 首先自定义非空注解NotEmpty如下:
package org.light4j.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface NotEmpty {
}
2. 其次定义一个实体类Person,并在部分属性上面加上注解@NotEmpty如下:
package org.light4j.annotation;
public class Person {
@NotEmpty
private Integer id;
@NotEmpty
private int age;
@NotEmpty
private String name;
@NotEmpty
private String sex;
private String address;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
3. 编写测试类Main如下:
package org.light4j.annotation;
import java.lang.reflect.Field;
public class Main {
public static void main(String[] args) {
try {
Person person = new Person();
person.setId(1);
person.setAge(50);
person.setName("张三");
person.setAddress("北京");
validateParam(person);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 验证数据完整性
*
* @param person
* @throws Exception
*/
public static void validateParam(Person person) throws Exception{
Class> personClass = (Class>)person.getClass();
Field[] field = personClass.getDeclaredFields();
for (int i = 0; i < field.length; i++) {
Field f= field[i];
f.setAccessible(true);
if (f.getAnnotation(NotEmpty.class)!= null) {
Object attrValue=f.get(person);
if(attrValue==null||attrValue.toString().endsWith("")){
//throw new RuntimeException(f.getName()+"属性值不能为空");
System.out.println(f.getName()+"属性值不能为空");
}
continue;
}
}
}
}
4. 测试结果截图如下所示:
打赏
微信扫一扫,打赏作者吧~欢迎关注人生设计师的微信公众账号
公众号ID:longjiazuoA