编写自己的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 ...
随机推荐
- nginx缓存原理
一.HTTP字段理解 1.Expires: 该字段的http1.0时的规范,值为一个绝对时间的GMT格式的时间字符串,代表缓存资源的过期时间,在这个时点之前即命中缓存. 缺点:服务器返回的时间,可能与 ...
- SHELL —— grep命令+正则表达式
一 什么是正则 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法.或者说:正则就是用来描述一类事物的规则. 生活中处处都是正则: 比如我们描述:4条腿 你可能会想 ...
- python2 跟3的区别
1----python2:1 臃肿 , 源码的重复量很多2:语法不清晰,掺杂着 c,pyp,java,的一些陋习 python3: 几乎是重构后的源码,规范 清晰 优美 2.python的分类 分为编 ...
- NHibernate 配置增加代码感知
Adding the Schema Include the schema in your Project, Solution, or Visual Studios XML Schemas folder ...
- Word 中设置图、表、公式、代码要与正文之间行间距
一.概述 在撰写论文等文档时,常常对图.表.公式.代码要与正文之间行间距有要求.例如: (5)图.表.公式.代码要与正文之间有6磅的行间距. 二.设置方式 选中 图/表/公式/代码 与 图题/表头/- ...
- 三道半平面交测模板题 Poj1474 Poj 3335 Poj 3130
求半平面交的算法是zzy大神的排序增量法. ///Poj 1474 #include <cmath> #include <algorithm> #include <cst ...
- IE6/7 下:inline-block解决方案
6/IE7下:inline-block解决方案 IE6/IE7下对display:inline-block的支持性不好. 1.inline元素的display属性设置为inline-block时, ...
- 【WIN7】windows\system32 下的几乎所有文件的简单说明【1】
1: aclui.dll .....Security Descriptor Editor,没有它,注册表编缉器会无法运行 2: ACTIVEDS.DLL .....(ADs 路由层 DLL). 没有它 ...
- ubuntu 安装pip
apt-get install python3-pip
- Spark1.x和2.x如何读取和写入csv文件
看很多资料,很少有讲怎么去操作读写csv文件的,我也查了一些.很多博客都是很老的方法,还有好多转来转去的,复制粘贴都不能看.下面我在这里归纳一下,以免以后用到时再费时间去查.前端实现文件下载和拖拽上传 ...