编写自己的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> {
//...
}
编写自己的validate校验框架原理(转)的更多相关文章
- JSR303完成validate校验并编写BeanValidator工具类
一.引入pom依赖 <!-- validator --> <dependency> <groupId>javax.validation</groupId> ...
- struts_19_对Action中所有方法、某一个方法进行输入校验(手工编写代码实现输入校验)
对所有方法进行校验1.通过手工编写代码的形式实现 需求:用户名:不能为空手机号:不能为空,并且要符合手机号的格式1,3/5/8,后面是9个数字 第01步:导包 第02步:配置web.xml <? ...
- Struts2 validate校验
一般的,用户注册的时候,我们需要校验一些用户提交过来的参数. 一般有两道屏障,一是在前台页面上使用js进行验证,直接杜绝了不正常信息的提交.二是将提交过来的信息进行验证,不通过则返回注册页面并显示错误 ...
- Spring Boot 2.x 编写 RESTful API (二) 校验
用Spring Boot编写RESTful API 学习笔记 约束规则对子类依旧有效 groups 参数 每个约束用注解都有一个 groups 参数 可接收多个 class 类型 (必须是接口) 不声 ...
- jquery.validate校验文件使用说明
官网地址:http://bassistance.de/jquery-plugins/jquery-plugin-validation 一导入js库<script src="../js/ ...
- jquery validate 校验使用总结
一.jquery.validator表单验证id和name问题 因为后台是struts,表单提交,所有输入框的值保存在name=对象.名字中,而jquery.validator表单验证用的是name, ...
- jquery validate 校验时,如果有type=hiddien
当校验时,不需要校验#warnId,否则会引起输入框#alarmtile里的样式混乱
- rails 国际化、validate校验、flash提示
1.Rails的国际化 根据特定的locale信息,提取相应的内容 通过config/environment.rb,指定应用的转换文件 config.i18n.load_path +=Dir[Ra ...
- jquery.validate校验+jquery.form提交,配合使用
原文链接:http://www.cnblogs.com/datoubaba/archive/2012/06/06/2538873.html 概述:本篇主要讨论jquery.validate结合jque ...
随机推荐
- 简明python教程五----数据结构
python中有三种内建的数据结构:列表.元组和字典 list是处理一组有序项目的数据结构,即你可以在一个列表中存储一个序列的项目.在python中,每个项目之间用逗号分隔. 列表中的项目应该包括在方 ...
- shell脚本调用传参【转载】
转自:https://www.cnblogs.com/cisum/p/8010658.html 1.直接使用$0,$1,$2,$3 $0是脚本的名字,就是按顺序来 #!/bin/bash # auth ...
- Hadoop家族学习路线图-张丹老师
前言 使用Hadoop已经有一段时间了,从开始的迷茫,到各种的尝试,到现在组合应用….慢慢地涉及到数据处理的事情,已经离不开hadoop了.Hadoop在大数据领域的成功,更引发了它本身的加速发展.现 ...
- ubuntu中在Launcher上添加Android Studio的运行图标
运行命令创建desktop文件: sudo gedit /usr/share/applications/android_studio.desktop 打开窗口后输入以下内容,注意Exec和Icon要修 ...
- 解决Webpack 安装sass时出现的错误
webpack环境下,加载css需要 css-loader 和 style-loader. css-loader:使用类似@import和url(...)的方法实现 require的功能: style ...
- CMSIS_OS中osMailPut 和 osMessagePut 的问题
1. 背景 为了屏蔽不同OS之间的差别,ARM公司开发了一套OS接口--CMSIS_OS. 在使用STM32 cube生成的free rtos工程中,遇到一些问题. 问题1:osMessageGet ...
- 【Head First Servlets and JSP】笔记
1.谈到服务器的时候,可能是指物理主机(硬件),也可能是指Web服务应用(软件). 2.谈到客户的时候,通常指人类用户,或者是浏览器应用,或者两者都包括,浏览器应用做些什么?发送请求.解释HTML和呈 ...
- Django学习笔记之Ajax入门
AJAX准备知识:JSON 什么是 JSON ? JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation) JSON 是轻量级的文本数据交换格式 JS ...
- ASP.NET的内置对象
Request 该对象用于检索从浏览器向服务器所发送的请求中的信息.在按下“提交”按钮时,Request对象将读取和提取通过HTTP请求发送的参数.在用户提交表单时,包含在输入控件中的数据将与表单 ...
- 《大型网站系统与JAVA中间件实践》读书笔记-数据访问层
数据访问层 5.1.2数据库垂直/水平拆分的困难 随着网站业务的快速发展,数据量和访问量不断上升,数据库的压力越来越大. 更换更好的硬件(Scale Up)是一种解决方案,而且在我们能付得起硬件费用并 ...