话题框架与类库 › AviatorScript

框架与类库:AviatorScript

1. 简介

AviatorScript 是一款高性能、轻量级、基于 Java 的表达式引擎和脚本语言。它支持将表达式编译为字节码,具备丰富的语法特性,适用于动态规则配置和实时计算场景。自 5.0 版本起,AviatorScript 从单纯的表达式引擎升级为通用脚本语言,支持 if/elsefor/while 等控制语句。

2. 核心特性

  • 高性能:表达式编译为字节码,执行速度快,资源消耗低。
  • 轻量级:核心包体积小,依赖少,易于集成。
  • 易用性:语法简洁,接近 Java,学习成本低。
  • 灵活性:支持自定义函数、操作符、类型转换及高精度计算。
  • 安全性:提供白名单、黑名单和沙箱机制,防止代码注入和越权访问。
  • 脚本能力:支持完整的流程控制、集合操作及函数定义。

3. 应用场景

  • 动态业务规则配置与计算
  • 数据清洗、过滤及 ETL 处理
  • 指标衍生与自动化分析
  • 低代码/可视化平台的公式引擎
  • 自动化根因分析与报警推理

4. 基本语法

4.1 字面量与变量

支持 intlongdoubledecimalstringbooleannil 等类型。

a + 10
name == "Aviator"

4.2 运算符

支持加减乘除、逻辑运算、比较运算及正则表达式等。

a > 0 && b < 100
string.contains("abc", name)

4.3 控制语句

支持 if/elsif/elseforwhilebreakcontinue

if a > 10 {
  return "大";
} elsif a > 5 {
  return "中";
} else {
  return "小";
}

4.4 集合操作

支持 listmap 的快捷定义与操作。

let arr = [1, 2, 3];
let map = {"k": 1, "v": 2};
foreach item in arr {
  println(item);
}

4.5 函数定义与调用

支持自定义函数和高阶函数。

function add(x, y) {
  return x + y;
}
add(1, 2)

5. 集成与使用

5.1 依赖引入

通过 Maven 引入:

<dependency>
  <groupId>com.googlecode.aviator</groupId>
  <artifactId>aviator</artifactId>
  <version>5.3.3</version>
</dependency>

5.2 基本用法

import com.googlecode.aviator.AviatorEvaluator;

Map<String, Object> env = new HashMap<>();
env.put("a", 10);
Object result = AviatorEvaluator.execute("a + 100", env); // 输出 110

5.3 表达式编译与复用

Expression exp = AviatorEvaluator.compile("a * b + 10", true);
Map<String, Object> env = Map.of("a", 2, "b", 3);
Object result = exp.execute(env); // 输出 16

5.4 自定义函数

AviatorEvaluator.addFunction(new AbstractFunction() {
  @Override
  public String getName() { return "square"; }
  @Override
  public Object call(Map<String, Object> env, Object arg1) {
    return ((Number)arg1).doubleValue() * ((Number)arg1).doubleValue();
  }
});
AviatorEvaluator.execute("square(5)"); // 输出 25

6. 安全与扩展

  • 白名单:限制可用类,防止越权访问:

    AviatorEvaluator.setOption(Options.ALLOWED_CLASS_SET, Sets.newHashSet(List.class));
    
  • 循环次数限制:防止死循环:

    AviatorEvaluator.setOption(Options.MAX_LOOP_COUNT, 10000);
    
  • 特性开关:可禁用部分功能:

    AviatorEvaluator.getInstance().disableFeature(Feature.Module);
    

7. 性能对比与优势

  • 性能优于 JEXL、JUEL、QLExpress 等表达式引擎,在字面量、变量、方法调用等场景表现均衡。
  • 代码体积小,依赖少,适合嵌入微服务、低代码及数据平台。
  • 语法灵活,支持多种扩展,满足复杂业务需求。

8. 实践案例

  • 去哪儿网:自动化根因分析系统,利用 AviatorScript 结合指标配置动态计算衍生指标,实现秒级分析和自动报警。
  • vivo:积分任务体系,使用 AviatorScript 进行任务规则过滤与奖励计算,提升任务系统灵活性和上线效率。
  • MetrAutoAPI:指标自动化平台,AviatorScript 作为规则引擎,对查询结果进行灵活运算和自动化分析。

9. 常见问题与注意事项

  • 语法与 Java 存在差异,需注意类型转换规则(longbigintdecimaldouble)。
  • null 字面量为 nil
  • elif 写作 elsif
  • 集合和函数等高级用法需参考官方文档。

10. 参考资料

11. 总结

AviatorScript 以其高性能、灵活性和易用性,成为国内主流的 Java 表达式引擎,广泛应用于动态规则配置、指标计算及自动化分析场景,是企业级系统推荐的表达式/脚本引擎之一。

  • «
  • 1
  • »

trang chủ - Wiki
Copyright © 2011-2025 iteam. Current version is 2.143.0. UTC+08:00, 2025-05-26 08:14
浙ICP备14020137号-1 $bản đồ khách truy cập$