最近在项目中需要根据不同的条件来做走不同分支的逻辑,那么就需要动态判断条件表达式结果(不想写一堆if else),研究了一番,发现了一个轻量级的Java表达式执行引擎:
aviator,整个使用下来挺简单高效的,今天推荐给大家,下面介绍啊一下这款框架!
![ba62243c9a4e939e54d8b7d6f1ab711f.png](https://i-blog.csdnimg.cn/blog_migrate/ff39a74688e645db75914a6dab28a610.jpeg)
二.aviator简介
Aviator是一个轻量级、高性能的Java表达式执行引擎, 它动态地将表达式编译成字节码并运行,主要用于各种表达式的动态求值!相比Groovy这样的重量级脚本语言,aviator是非常轻量级的表达式执行引擎。
二.aviator特性
- 支持绝大多数运算操作符,包括算术操作符、关系运算符、逻辑操作符、位运算符、正则匹配操作符(=~)、三元表达式
- 支持传入变量
我在开发里用到的就是关系运算符,动态判断执行结果(true/false),以两个变量a、b为例看下aviator的执行方式:
![551ea7166c7ba25b889baf1b7977dcfb.png](https://i-blog.csdnimg.cn/blog_migrate/ed72326c85c556bf2cbcae9030f807ed.jpeg)
aviator提供了AviatorEvaluator#execute(java.lang.String)方法来执行操作运算符
- 内置一套强大的常用函数库
![6adb969d82986cdea692b28138f2fc45.png](https://i-blog.csdnimg.cn/blog_migrate/4d6a5470f209d1ca7b3dfc4e956df1a3.jpeg)
- 支持自定义函数
如果自带函数不能满足开发需要, aviator还支持自定义函数,只要实现com.googlecode.aviator.runtime.type.AviatorFunction接口, 并注册到AviatorEvaluator即可使用!
注册函数通过AviatorEvaluator.addFunction方法, 移除可以通过removeFunction方法
- 支持赋值
![300743f93e057dd9a23aa1a021445814.png](https://i-blog.csdnimg.cn/blog_migrate/5fc3e0bf4e12ad5e4e1b5cd65b7fa4ff.jpeg)
aviator提供的特性还有很多,不再一一举例,github地址如下,有兴趣的可以进一步学习应用
https://github.com/killme2008/aviator