利用 Aviator 实现规则配置
2023-04-18 14:42:53 时间
背景
用户希望通过一些自定义一些表达式,灵活的对数据进行过滤
为什么选择 Aaviator
我们调研了业界主流的一些规则引擎以及表达式引擎,如 Drools、EasyRule、JEXL、Aviator、qlExpress 等。从复杂度、与我们目前需求的契合程度、扩展性、性能、社区活跃度、文档、资料的完善程度以及使用者的学习成本等多方面考虑,决定采用 Aviator 来作为 filter_express 解析引擎 。 Aviator创建之初就是为了高性能、轻量级,并且支持自定函数以及各种定制选项,拥有各种内置函数且扩展较好,足够简单,用户的学习成本足够低,并且可以完美解决这个的问题。
Aaviator 基本使用
1.添加依赖
<dependency>
<groupId>com.googlecode.aviator</groupId>
<artifactId>aviator</artifactId>
<version>5.3.0</version>
</dependency>
public class TestAviator {
public static void main(String[] args) {
System.out.println(AviatorEvaluator.execute("1+2"));
System.out.println(AviatorEvaluator.execute("1+2==3"));
System.out.println(AviatorEvaluator.execute("1+2>3"));
}
}
Aaviator 高级特性-自定义函数
我们要自定义个 add 函数,希望 add(1,2) 等价于 1+2
class AddFunction extends AbstractFunction {
@Override
public AviatorObject call(Map<String, Object> env,
AviatorObject arg1, AviatorObject arg2) {
Number left = FunctionUtils.getNumberValue(arg1, env);
Number right = FunctionUtils.getNumberValue(arg2, env);
return new AviatorDouble(left.intValue() + right.intValue());
}
public String getName() {
return "add";
}
}
测试
public class TestAviator {
public static void main(String[] args) {
//注册函数
AviatorEvaluator.addFunction(new AddFunction());
System.out.println(AviatorEvaluator.execute("add(1, 2)")); // 3.0
System.out.println(AviatorEvaluator.execute("bigint(add(add(1, 2), 100))")); // 103.0
}
}
官网
https://www.yuque.com/boyan-avfmj/aviatorscript
相关文章
- 【技术种草】cdn+轻量服务器+hugo=让博客“云原生”一下
- CLB运维&运营最佳实践 ---访问日志大洞察
- vnc方式登陆服务器
- 轻松学排序算法:眼睛直观感受几种常用排序算法
- 十二个经典的大数据项目
- 为什么使用 CDN 内容分发网络?
- 大数据——大数据默认端口号列表
- Weld 1.1.5.Final,JSR-299 的框架
- JavaFX 2012:彻底开源
- 提升as3程序性能的十大要点
- 通过凸面几何学进行独立于边际的在线多类学习
- 利用行动影响的规律性和部分已知的模型进行离线强化学习
- ModelLight:基于模型的交通信号控制的元强化学习
- 浅谈Visual Source Safe项目分支
- 基于先验知识的递归卡尔曼滤波的代理人联合状态和输入估计
- 结合网络结构和非线性恢复来提高声誉评估的性能
- 最佳实践丨云开发CloudBase多环境管理实践
- TimeVAE:用于生成多变量时间序列的变异自动编码器
- 具有线性阈值激活的神经网络:结构和算法
- 内网渗透之横向移动 -- 从域外向域内进行密码喷洒攻击