zoukankan      html  css  js  c++  java
  • 编写自己的validate校验框架原理(转)

    原文链接:http://blog.csdn.net/a973893384/article/details/51517388

    具体思路:

      我们使用自定义注解实现。然后需要解决的是两个问题:

        1是如何扫描自定义注解

        2是如何扫描到自定义注解做出对应的validate校验

      第一个问题的解决方案:

        自定义一个AnnotationHelper类,该类可配置自定义注解的源文件的package路径。 

    AnnotationHelper{
      private static final String BASE_PAGE = "";
      private Map<Annotation,Class<? extends Annotation>> ANNOTATION_CLASS_SET = new HashMap<Annotation,Class<? extends Annotation>>();
    
      static(){
            loadAnnotation(BASE_PAGE);
        }
    
       
        private void loadAnnotation(){
            /**
            *扫描指定包下的Class文件,将得到的Annotation以及对应的Class对象注入ANNOTATION_CLASS_sET
            */
        }

      private static Annotation choice(Field field){
        //根据传入的field对象得到该field对象上面的validate注解,可拓展为得到Annotation[]
      }

      private static Class<? etxends Annotation> choice(Annotation annotation){
        //..
      }  }

    前面发现,AnnotationHelper类在加载前就会自动扫描注解包,将注解对应信息放入它的map中去,然后调用choice方法可以得到校验注解的对象信息和Class信息。

      使用的不是框架自动扫描,而是手动调用Validate类的validate方法校验对象。

    public static void main( String[] args ) {
            User user = new User();
            Validator validator = Validator.newInstance(user);
            validator.validate();
        }

      Hibernate的validate框架使用的是@Validate注解实现,我们也可以这样拓展,然后就是配置一个监听或者说是扫描的问题

      Validate类包含一个校验方法validate,校验传入的object,出现问题抛出异常。

        

    2、如何做出对应的validate校验?

      Annotation类至少包含几个字段,例如:

    @Target(ElementType.FIELD)
    @Retention(RetentionPolicy.RUNTIME)
    public @interface NotNull {
        Class<?> clazz() default NotNullValidate.class;
        String value() default Message.NOT_NULL;
    }

    Validate类的规则,ValidateSuper接口:

      

    //一个抽象类,包含抽象方法validate、init,用于编写校验逻辑和初始化操作
    public
    abstract class AbstractValidate<T> {
    //... }

      

  • 相关阅读:
    汇编中的字符串操作指令
    Scoket需要注意的地方
    判断是否为json对象
    offsetTop,offsetWidth,offsetParent
    ASP.net中页面事件的先后顺序
    opengl32.lib、glu32.lib、 glaux.lib、OpenGL32.lib的意思。
    递归中,方法中的变量值被改变的问题。
    中国数字认证网
    JSON中for in的使用
    (网上转载)JavaScript 跑马灯
  • 原文地址:https://www.cnblogs.com/aigeileshei/p/6437454.html
Copyright © 2011-2022 走看看