当前位置: 首页 > 软件库 > 程序开发 > 常用工具包 >

Aviator

Java 表达式引擎
授权协议 LGPL
开发语言 Java
所属分类 程序开发、 常用工具包
软件类型 开源软件
地区 国产
投 递 者 韩佐
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

AviatorScript 是一门高性能、轻量级寄宿于 JVM 之上的脚本语言。

特性介绍

  1. 支持数字、字符串、正则表达式、布尔值、正则表达式等基本类型,完整支持所有 Java 运算符及优先级等。
  2. 函数是一等公民,支持闭包和函数式编程
  3. 内置 bigint/decmal 类型用于大整数和高精度运算,支持运算符重载得以让这些类型使用普通的算术运算符 +-*/ 参与运算。
  4. 完整的脚本语法支持,包括多行数据、条件语句、循环语句、词法作用域和异常处理等。
  5. 函数式编程结合 Sequence 抽象,便捷处理任何集合。
  6. 轻量化的模块系统
  7. 多种方式,方便地调用 Java 方法,完整支持 Java 脚本 API(方便从 Java 调用脚本)。
  8. 丰富的定制选项,可作为安全的语言沙箱和全功能语言使用。
  9. 轻量化,高性能,通过直接将脚本翻译成 JVM 字节码,AviatorScript 的基础性能较好。

使用场景包括:

  1. 规则判断及规则引擎
  2. 公式计算
  3. 动态脚本控制
  4. 集合数据 ELT 等 ……
  • 1. Aviator 1.1 什么是Aviator? Aviator是一门高性能、轻量级的Java语言实现的表达式求值引擎,主要用于表达式的动态求值。 1.2 为什么需要Aviator? Aviator的设计目标是 轻量级 和 高性能 ,相对于Groovy、JRuby的笨重,Aviator非常小,加上依赖包就450K,不算依赖包就70K,不过Aviator的语法受限,它并不是一门完整的语言,只是语

  • import com.google.common.collect.ImmutableMap; import com.google.common.collect.Maps; import com.googlecode.aviator.AviatorEvaluator; import com.googlecode.aviator.Options; import com.common.util.Expr

  • 简介 Aviator是一个高性能、轻量级的java语言实现的表达式求值引擎,主要用于各种表达式的动态求值。现在已经有很多开源可用的java表达式求值引擎,为什么还需要Avaitor呢? Aviator的设计目标是轻量级和高性能 ,相比于Groovy、JRuby的笨重,Aviator非常小,加上依赖包也才450K,不算依赖包的话只有70K;当然,Aviator的语法是受限的,它不是一门完整的语言,而

  • 1、使用Aviator 需要导入包 <dependency> <groupId>com.googlecode.aviator</groupId> <artifactId>aviator</artifactId> <version>3.3.0</version> </dependency> 2、执行表达式 Aviator的数值类型仅支持Long和Double, 任何整数都将

  • Aviator语法 1 简介 Aviator 的基本过程是将表达式直接翻译成对应的 java 字节码执行,整个过程最多扫两次(开启执行优先模式,如果是编译优先模式下就一次),这样就保证了它的性能超越绝大部分解释性的表达式引擎,测试也证明如此;其次,除了依赖 commons-beanutils 这个库之外(用于做反射)不依赖任何第三方库,因此整体非常轻量级,整个 jar 包大小哪怕发展到现在 5.0

  • 1. Aviator 1.1 什么是Aviator? Aviator是一门高性能、轻量级的Java语言实现的表达式求值引擎,主要用于表达式的动态求值。 1.2 为什么需要Aviator? Aviator的设计目标是 轻量级 和 高性能 ,相对于Groovy、JRuby的笨重,Aviator非常小,加上依赖包就450K,不算依赖包就70K,不过Aviator的语法受限,它并不是一门完整的语言,只是语

  • 目录 前言: aviator实现逻辑 java表达式定义类PatternFunction 自定义AviatorObject实现的依赖配置

  • 导语 推荐读者阅读较为官方的Aviator说明文档,本文是笔者使用过程中的笔记小结,知识可能比较零散和片面,敬请谅解 jsonpath 推荐官方文档:https://gitee.com/mirrors/JsonPath?_from=gitee_search aviator 推荐官方文档:https://www.yuque.com/boyan-avfmj/aviatorscript/ra28g1#9

  • 前言 提示:aviator的demo若干 简介 Aviator 的基本过程是将表达式直接翻译成对应的 java 字节码执行,整个过程最多扫两趟(开启执行优先模式,如果是编译优先模式下就一趟),这样就保证了它的性能超越绝大部分解释性的表达式引擎,测试也证明如此;其次,除了依赖 commons-beanutils 这个库之外(用于做反射)不依赖任何第三方库,因此整体非常轻量级,整个 jar 包大小哪怕

  • 在使用Aviator写脚本的时候,要计算两个时间字符串,得到处理时长。处理时间的时候,如果时间字符串是不固定。想传时间字符串进去,然后进行替换计算该如何处理呢? 处理思路:   用“.getTime()”进行标记这个是时间字符串,要把字符串时间替换为日期时间。   如果结束时间,则处理时长字段为空"" 代码 // 把时间字符串转换为时间 public static Date strToDateTi

  • java表达式引擎有很多,最后选择了Aviator。原因是:高性能、轻量级。 Aviator 是将表达式直接翻译成对应的 java 字节码执行,除了依赖 commons-beanutils 这个库之外(用于做反射)不依赖任何第三方库,因此整体非常轻量级,整个 jar 包大小哪怕发展到现在 5.3 这个版本,也才 620K。 <dependency> <groupId>com.googlec

  • 在灰度系列中《基于springcloud的灰度实现方案(二)》,之前规则适配使用数据库+策略模式实现,单个规则还好,多个规则,各种场景使用,还是稍微有点欠缺。就想着用java规则引擎来解决这个问题。 之前在项目中使用过drools,比较重,初始加载复杂,首次执行效率较低,最好预热一下,其次分布式规则处理时的一致性也得自己把控; 之前就了解过aviator,这次就直接用了。 相关资料 # 官网地址

  • 前言 你的业务项目是否有很多规则需要判断?规则是否经常变动?如果全部用代码开发是不是每次变动都需开发人员改动代码逻辑,重新编译、部署上线?是不是觉得非常繁琐麻烦? 本文推荐使用aviator规则引擎来处理此类场景的问题,做到规则可动态配置、自定义函数、无需打包重启程序。 本文主要讲解aviator的基本使用以及他的各种函数如何调用 一、aviator是什么? AviatorScript 起源于 2

  • 在使用Aviator写脚本的时候,处理时间的时候,只能获取到当前时间。想传时间字符串进去,然后进行替换计算该如何处理呢? 代码 字符串转时间 // 把时间字符串转换为时间 public static Date strToDateTime(String time) { Date dateTime = null; try { dateTime = new SimpleD

  • aviator可解决什么问题 使用表达式代替ifelse实现复杂策略,类似于策略模式 另外判断逻辑可以放到运营后台进行配置 aviator如何使用 核心方法 com.googlecode.aviator.AviatorEvaluator.execute 表达式判断的时候,如果靠左边的条件可以拿到判定结果,右边就不用判断了,如果后面是方法的话,就不会调用了,减少了不必要的方法调用 package c

  • 高性能 轻量级 Java语言实现 表达式求值引擎 用于各种表达式的动态求值 为什么选择aviator? 设计目标就是轻量级和高性能,相比于Groovy和JRuby的笨重,aviator非常小 其他求值器一般是通过解释的方式运行,而aviator是直接将表达式编译成Java字节码,交给JVM去执行 支持大部分运算操作符【算数操作符、关系运算符、逻辑操作符、位运算、正则匹配操作符=~、三元运算符】,并

  • Aviator 是一个高性能、轻量级的 Java 语言实现的表达式求值引擎,主要用于各种表达式的动态求值。 Aviator 的实现思路与其它轻量级的求值器不同,其它求值器是通过解释的方式运行,而 Aviator 是直接将表达式编译成Java字节码,交给JVM去执行。 Aviator 支持大部分运算操作符,包括算术操作符、关系运算符、逻辑运算符、位运算符、三元表达式、正则表达式匹配等;并且支持操作符

  • 1.正则表达式-匹配 Map<String,Object> map = new HashMap<>(); map.put("aa","SDGG:.pppp"); Expression expression = AviatorEvaluator.compile("aa =~ /'SDGG:.*'/", true); Boolean result = (Boolean) expression

  • Aviator 规则表达式引擎分类 编译型规则表达式引擎:预先编译成可执行对象,运行时多次执行; 解释型规则表达式引擎:不需要预先进行编译,在运行时,要先进行解释再运行。 Aviator原理及特点 Aviator 的基本过程是将字符串表达式直接翻译成对应的 java 字节码执行,整个过程最多扫两趟(开启执行优先模式,如果是编译优先模式下就一趟),这样就保证了它的性能超越绝大部分解释性的表达式引擎,

  • 目录 1 collection 数据场景性能对比 1.1 测试场景说明 1.1.1 Java 代码执行场景 1.1.2 aviator 场景 1.1.3 spel 场景 1.2 测试数据生成规则 1.3 实际性能比对 1.4 小结 2 String 数据场景性能对比 2.1 测试场景说明 2.2 测试数据生成说明 2.3 实际性能对比 2.4 小结 3 数值数据场景性能对比 3.1 测试场景说明

 相关资料
  • 你,对,就是你,正在看这篇文章的人,我虽然不认识你,但是 我可以负责任的说, 如果你看到这个标题就心里在悄悄的呼喊: “靠,他们连这个都有!我省事了,哇哈哈哈和”。 那么,你绝对属于百分之一的特例。 就是说,绝大多数人的绝大多数项目,是不需要 一个嵌入式的表达式引擎的。因此,提供这个功能的目的就是: 满足一小撮人的一小撮要求 但是,"一小撮人"的"一小撮要求"有很多,作为一个小众类库,为什么单单打

  • IntelliJ一直建议我用方法引用替换我的lambda表达式。 两者之间有什么客观差异吗?

  • 问题内容: 有没有办法让AngularJS在模型数据中评估表达式? HTML: 模型: 最终结果将是:。 问题答案: 您可以使用该服务来插值字符串… JSFiddle

  • 我有一个非常好的正则表达式,它从文本中选择引用: 但是我需要一个正则表达式,它从没有引号的文本中选择引号。 例如,我有: 鲸鱼包括八个现存的家族:“鲸豚科”(白鲸),“鲸豚科”(露脊鲸),“鲸豚科”(侏儒露脊鲸),“白鲸科”(灰鲸),“独角鲸科”(白鲸和独角鲸),“抹香鲸科”(抹香鲸)。。。 我需要在引号之间提取文本: 龟甲翅目,龟甲翅目,龟甲翅目,... 要提取括号之间的文本,我使用正则表达式:

  • 算术运算符 Lua 的算术运算符如下表所示: 算术运算符 说明 + 加法 - 减法 * 乘法 / 除法 ^ 指数 % 取模 示例代码:test1.lua print(1 + 2) -->打印 3 print(5 / 10) -->打印 0.5。 这是Lua不同于c语言的 print(5.0 / 10) -->打印 0.5。 浮点数相除的结果是浮点数 -- print(1

  • 和其他计算机语言一样,MATLAB也有数学表达式。但与多数计算机语言不同的是,MATLAB的表达式是针对矩阵的。表达式有以下构成: 变量 数 算子 函数

  • Rust 程序(大部分)由一系列语句构成: fn main() { // 语句 // 语句 // 语句 } Rust 有多种语句。最普遍的语句类型有两种:一种是绑定变量,另一种是表达式带上分号: fn main() { // 变量绑定 let x = 5; // 表达式; x; x + 1; 15; } 代码块也是表达式,所以

  • 一、常用表达式: 和大多数关系型数据库一样,SQLite能够很好的支持SQL标准中提供的表达式,其函数也与SQL标准保持一致,如: || * / % + - << >> & | < <= > >= = == != <> IS IS NOT IN LIKE AND OR ~ NOT 在上面的表达式中,唯一需要