1.什么是aviator?
Aviator是一个高性能、轻量级的java语言实现的表达式求值引擎,主要用于各种表达式的动态求值。现在已经有很多开源可用的java表达式求值引擎,为什么还需要Avaitor呢? Aviator的设计目标是
轻量级
和
高性能
,相比于Groovy、JRuby的笨重,Aviator非常小,加上依赖包也才450K,不算依赖包的话只有70K;当然,Aviator的语法是受限的,它不是一门完整的语言,而只是语言的一小部分集合。 其次,Aviator的实现思路与其他轻量级的求值器很不相同,其他求值器一般都是通过解释的方式运行,而Aviator则是直接将表达式
编译成Java字节码
,交给JVM去执行。简单来说,Aviator的定位是介于Groovy这样的重量级脚本语言和IKExpression这样的轻量级表达式引擎之间
Aviator的特性
- 支持大部分运算操作符,包括算术操作符、关系运算符、逻辑操作符、位运算符、正则匹配操作符(=~)、三元表达式?: ,并且支持操作符的优先级和括号强制优先级,具体请看后面的操作符列表。
- 支持大整数和精度运算(2.3.0版本引入)
- 支持函数调用和自定义函数
- 内置支持正则表达式匹配,类似Ruby、Perl的匹配语法,并且支持类Ruby的$digit指向匹配分组。
- 自动类型转换,当执行操作的时候,会自动判断操作数类型并做相应转换,无法转换即抛异常。
- 支持传入变量,支持类似a.b.c的嵌套变量访问。
- 函数式风格的seq库,操作集合和数组
- 性能优秀
Aviator的限制
- 没有if else、do while等语句,没有赋值语句,仅支持逻辑表达式、算术表达式、三元表达式和正则匹配。
- 不支持八进制数字字面量,仅支持十进制和十六进制数字字面量。
使用场景
2.代码工程
实验目的
利用aviator+aop实现参数校验
pom.xml
controller
在方法上加伤aviator校验规则
annotation
单个规则注解
多个规则注解
AOP拦截注解
全局异常拦截
以上只是一些关键代码,所有代码请参见下面代码仓库
代码仓库
3.测试
- 启动Spring Boot应用
- 访问 http://127.0.0.1:8088/simple?name=jack&age=12
- 返回校验信息
{"status":false,"code":4,"message":"Age must be over 18 years old","entry":null}
4.引用