Hi,自定义注解了解一下 | Java Debug 笔记

本文正在参加「Java主题月 – Java Debug笔记活动」,详情查看活动链接

一 故事背景

乐乐最近的学习中发现别人有自己定义注解,乐乐觉得很炫,注解这东西属于一种切面,自己去实现一定是很酷的一件事,于是乐乐也自己动手写了一个邮件检验的自定义注解

二 实践

  1. 先写个邮件校验注解

     @Target(ElementType.FIELD)
     @Retention(RetentionPolicy.RUNTIME)
     public @interface EmailValidate {
         String message();
     }
    复制代码

  1. 写一个注解管理器

     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();
         }
     }
    复制代码
  2. 将注解放在要校验的属性上

     /**
      * 收件人
      */
     @EmailValidate(message = "收件人邮箱格式有误")
     private String recipients;
     /**
      * 抄送人
      */
     @EmailValidate(message = "抄送人邮箱格式有误")
     public String ccEmail;
    复制代码
  3. 在需要调用的地方调用

     String validator = EmailValidateHandle.validator(object);
     
     
    复制代码

5.自定义注解完成!

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享