java blog 引擎_java 表达式引擎

背景

希望实现一些类似于 mybatis 的动态 sql,针对语句的判断,比如:

test = "name != null and name != ''"

这里就需要一个表达式的引擎,从零实现目前比较耗费时间,就去看看有没有现成的。

mvel

比较老牌了,很强大,但是好久没更新了

参考地址:

http://mvel.documentnode.com/

https://github.com/mvel/mvel

ScriptEngine 引擎

可以使用java 自带的ScriptEngine,基于此我们可以使用多种语言的实现,但是8之后就被移除了。。。

graalvm

多语言引擎,可以集成ruby,js,python,groovy,kotlin。。。。,总之很强大

JEXL

表达式语言,标准,灵活

http://commons.apache.org/proper/commons-jexl/

参考例子

import org.apache.commons.jexl.Expression;

import org.apache.commons.jexl.ExpressionFactory;

import org.apache.commons.jexl.JexlContext;

import org.apache.commons.jexl.JexlHelper;

Opera opera = new Opera( );

opera.setName("The Magic Flute");

opera.setComposer("Mozart");

opera.setYear(1791);

String expr =

"${opera.name} was composed by ${opera.composer} in " +

"${opera.year}.";

Expression e = ExpressionFactory.createExpression(expr);

JexlContext jc = JexlHelper.createContext();

jc.getVars().put("opera", opera);

String message = (String) e.evaluate(jc);

System.out.println( message );

spring 表达式语言

参考使用

public class Data {

private String name; // getter and setter omitted

}

Data data = new Data();

data.setName("John Doe");

ExpressionParser p = new SpelExpressionParser();

Expression e = p.parseExpression("name == 'John Doe'");

Boolean r = (Boolean) e.getValue(data); // will return true

e = p.parseExpression("Hello " + name + ", how are you ?");

String text = e.getValue(data, String.class); //

jsr 标准规范

参考地址

https://jcp.org/en/jsr/detail?id=341

beanshell

比较强大,而且一直在更新

参考地址

https://github.com/beanshell/beanshell

ikexpression

一款简洁够用,小巧的表达式包,文档网上有,但是代码,目前少维护了

一些其他类似的模版引擎

模版引擎,实际上也可以作为表达式引擎来使用,而且比较多,Velocity,FreeMarker,stringtemplate4

参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值