Aviator_Java_表达式引擎 _原创精品文档.pdfVIP

Aviator_Java_表达式引擎 _原创精品文档.pdf

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

Aviator_Java_表达式引擎

简介

前⾔

最近项⽬业务中有关于价格计算的模块,项⽬⽤到这个东西,感觉很⽅便和灵活,特地看了⼀下官⽅⽂档。

官⽅⽂档地址如下:

参照博客地址:

软件简介

是⼀门⾼性能、轻量级寄宿于JVM之上的脚本语⾔。

AviatorScript

备注:版本5之前都叫,5版本重⼤升级改名,详情请看官⽅⽂档介绍。

AviatorAviatorScript

Aviator是⼀个⾼性能、轻量级的java语⾔实现的表达式求值引擎,主要⽤于各种表达式的动态求值。现在已经有很多开源可⽤的java表达式求值引擎,为什么

还需要Avaitor呢?

Aviator的设计⽬标是轻量级和⾼性能,相⽐于Groovy、JRuby的笨重,Aviator⾮常⼩,加上依赖包也才450K,不算依赖包的话只有70K;当然,Aviator的语法

是受限的,它不是⼀门完整的语⾔,⽽只是语⾔的⼀⼩部分集合。

其次,Aviator的实现思路与其他轻量级的求值器很不相同,其他求值器⼀般都是通过解释的⽅式运⾏,⽽Aviator则是直接将表达式编译成Java字节码,交给

JVM去执⾏。简单来说,Aviator的定位是介于Groovy这样的重量级脚本语⾔和IKExpression这样的轻量级表达式引擎之间。

特性介绍

Aviator的特性

⽀持⼤部分运算操作符,包括算术操作符、关系运算符、逻辑操作符、正则匹配操作符(=~)、三元表达式?:,并且⽀持操作符的优先级和括号强制优先

级,具体请看后⾯的操作符列表。

⽀持函数调⽤和⾃定义函数

⽀持正则表达式匹配,类似Ruby、Perl的匹配语法,并且⽀持类Ruby的$digit指向匹配分组。

⾃动类型转换,当执⾏操作的时候,会⾃动判断操作数类型并做相应转换,⽆法转换即抛异常。

⽀持传⼊变量,⽀持类似a.b.c的嵌套变量访问。

性能优秀

Aviator的限制:

没有ifelse、dowhile等语句,没有赋值语句,仅⽀持逻辑表达式、算术表达式、三元表达式和正则匹配。

没有位运算符

使⽤场景包括:

1.规则判断及规则引擎

2.公式计算

3.动态脚本控制

4.集合数据ELT等……

整体结构

Aviator的结构⾮常简单,⼀个典型的求值器的结构

Demo

创建项⽬

创建⼀个空的Maven项⽬

导⼊以下依赖

表达式求值引擎!----

dependency

groupIdcom.googlecode.aviator/groupId

artifactIdaviator/artifactId

version5.1.4/version

/dependency

dependency

groupIdjunit/groupId

artifactIdjunit/artifactId

version4.12/version

scopecompile/scope

/dependency

执⾏表达式

Aviator的使⽤都是集中通过com.googlecode.aviator.AviatorEvaluator这个⼊⼝类来处理,最简单的例⼦,执⾏⼀个计算1+2+3的表达式:

/**

计算*1+2+3

*/

@Test

publicvoidtest01(){

Longresult=(Long)AviatorEvaluator.execute(1+2+3);

System.out.println(result=+result);//6

}

细⼼的朋友肯定注意到结果是Long,⽽不是Integer。这是因为Aviator的数值类型仅⽀持Long和Double,任何整数都将转换成Long,任何浮点数都

将转换为Double,包括⽤户传⼊的变量数值。这个例⼦的打

文档评论(0)

191****1314 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档