应用场景
需求:用户组合系统函数制定公式,代码调用计算。
解决方法:本来是打算使用java编写一个编译器,但是工作难度较大,在网上搜索到别的解决方案,Aviator表达式求职引擎,解决问题。
简介
Aviator是一个高性能、轻量级的 java 语言实现的表达式求值引擎, 主要用于各种表达式的动态求值。 Aviator的语法是受限的, 它不是一门完整的语言, 而只是语言的一小部分集合。
Aviator的实现思路与其他轻量级的求值器很不相同, 其他求值器一般都是通过解释的方式运行, 而Aviator则是直接将表达式编译成Java 字节码, 交给JVM去执行。简单来说, Aviator的定位是介于Groovy这样的重量级脚本语言和IKExpression这样的轻量级表达式引擎 之间。
Aviator支持大部分运算操作符, 包括算术操作符、关系运算符、逻辑操作符、位运算符、正则匹配操作符(=~)、三元表达式(??, 并且支持操作符的优先级和括号强制优先级, 具体请看后面的操作符列表, 支持自定义函数.
maven依赖
<!-- 表达式求值引擎 -->
<dependency>
<groupId>com.googlecode.aviator</groupId>
<artifactId>aviator</artifactId>
<version>4.1.2</version>
</dependency>
自定义函数
因为业务需要基础的函数作为组合公式的基础,所以要事先制定好自定义函数,Aviator的自定义函数需要类继承Abstract