编写自己的validate校验框架原理(转)
2024-10-19 21:43:12
原文链接: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> {
//...
}
最新文章
- 安卓Design包之超强控件CoordinatorLayout与SnackBar的简单使用
- linux常用命令之文件权限
- 实例化bean的三种方式
- 使用Boost asio实现异步的TCP/IP通信
- python: 实现sha1小工具
- LA 4636 (贪心) Cubist Artwok
- 使用windows-SQLyog连接linux-mysql
- node读写json文件(进阶)
- 用extjs6.0写一个点击新建窗口的功能
- 47. leetcode 437. Path Sum III
- 前端测试框架Jest系列教程 -- Global Functions(全局函数)
- 在 EFCore 定义的实体中进行 FreeSql 开发
- 用vector与bitset分别创建1亿以内的素数表,比较快慢
- jmeter如何进行MQTT性能测试(测试前期准备二,MQTT插件及协议了解)
- redis---安装和开启和关闭
- 中间件RabbitMQ之运维篇
- HDU1233(Kruskal&;Prim两解)
- Altium 拼板方法以及 注意的 地方
- IE中div被视频遮住的解决方法
- C/C++ -- Gui编程 -- Qt库的使用 -- 组件大杂烩