一 故事背景
乐乐最近的学习中发现别人有自己定义注解,乐乐觉得很炫,注解这东西属于一种切面,自己去实现一定是很酷的一件事,于是乐乐也自己动手写了一个邮件检验的自定义注解
二 实践
先写个邮件校验注解
@Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) public @interface EmailValidate { String message(); }
写一个注解管理器
public class EmailValidateHandle {
public static <T> String validator(T t) throws IllegalArgumentException, IllegalAccessException{ StringBuilder errorMessage = new StringBuilder(); Class<? extends Object> cla = t.getClass(); //利用反射获取类的所有字段包含私有属性 Field[] fields = cla.getDeclaredFields(); for(Field f:fields){ //判断字段是否有定义NotNull注解 EmailValidate emailValidateAnnotation = f.getAnnotation(EmailValidate.class); if(null != emailValidateAnnotation){ //设置些属性是可以访问的 f.setAccessible(true); //得到此属性的值 Object val = f.get(t); boolean flag = checkEmail(val); if(!flag){ //获取注解上的异常信息 errorMessage.append(emailValidateAnnotation.message()).append(","); } } } return errorMessage.toString(); }
}
将注解放在要校验的属性上
/**
- 收件人
*/
@EmailValidate(message = "收件人邮箱格式有误")
private String recipients;
/**- 抄送人
*/
@EmailValidate(message = "抄送人邮箱格式有误")
public String ccEmail;- 在需要调用的地方调用
String validator = EmailValidateHandle.validator(object);
5.自定义注解完成!