用spring Aop 和反射,手写牛p的验证框架
目前spring常用的验证框架有 JSR - 303 、Bean验证框架等等。但是这些验证框架都有一个毛病,就是使用困难,内聚性差,并且代码可控性低。
比如JSR - 303框架注解,@Null、@NotNull 等等,太过于繁琐,并且一个实体类中每个字段都要注解验证。但是我们常用的验证可能只有空值检查,或者适合我们项目的常用验证。并且自定义验证太过于麻烦,并且报错信息控制繁琐到让人难以忍受。所以本人按照个人理解和使用习惯,写了一个自定义验证框架,盼望各位看官多多指教。
首先写一个自定义注解
这个自定义注解里面,包含了一个组枚举类,用于区分校验组,比如新建组,和修改组。这样可以应付多种情况下的检测,从而达到少写实体类的目的。
可以看到普通组中加入了 allGroup这个 boolean变量,这是为了可以让一个注解,同时在两个组都能进行验证。并且本验证模块,和本人写这个模块的最大原因就是,空值检查自动检查。因为几乎所有变量默认都是检查空值。。。(标题吹比框架....,,容我做次标题党 O(∩_∩)O哈哈)
基本工作准备完毕,下面就开始写切面类,对方法进行增强
当变量没有注解时候,就默认做空值检查。
当对象不为空的时候,对实体类内部所有变量进行检查。只重复一次。
检测方法举例
聊聊亮点:
1. 内聚性强,所有的检测方法都在一个类,有复杂方法,可以引入实现类。
2. 不用记多个注解,只要三个注解 @BetterCheck @NormalCheck @UpdateCheck
3. 异常可控性强,想怎么玩就怎么玩
4. 代码量少,如果默认非空检测,只要一个@BetterCheck,不会影响原来任何代码
5. 注解更清晰,枚举类说明,清晰介绍检查是干啥子的
6. 性能更强,少了反射调用方法的代码,性能更上n层楼
7. 轻量级结构,仅仅依赖于Spring
使用示范:
两个组,添加组和更新组,个人感觉还是比较清晰,简洁。
原文地址:https://www.cnblogs.com/foundwind/p/11017808.html
- HDUOJ----2952Counting Sheep
- Golang语言社区--【基础知识】函数
- HDUOJ1060Leftmost Digit
- 轻量级交互数据json格式初探
- Golang语言社区--【基础知识】语言数组
- HDUOJ1086You can Solve a Geometry Problem too
- Golang语言社区--【基础知识】常量
- HDUOJ------1058 Humble Numbers
- MySQL偏移量的一点分析
- HDUOJ------------1051Wooden Sticks
- HDUOJ-----2068RPG的错排
- MySQL创建表失败的问题
- HDUOJ-----1066Last non-zero Digit in N!
- Golang语言社区-【基础知识】切片
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释