commons-jexl3 用法示例
这个库可以用来做强大无比的规则引擎,懂的都懂,不理解的多说也无用。
jexl版本信息:
<dependency><groupId>org.apache.commons</groupId><artifactId>commons-jexl3</artifactId><version>3.1</version></dependency>
具体使用
jexl的用法是我自己使用、体会后总结出来的,会配以简要的说明,只代表个人理解。
下方代码片段的都可直接运行不报错。
本机环境 JDK8
。
建立几个test文件。
文件1: expression 用法
JexlExpressionTest.java
package cn.xuetian.jexl;import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import org.apache.commons.jexl3.JexlContext;
import org.apache.commons.jexl3.JexlEngine;
import org.apache.commons.jexl3.JexlExpression;
import org.apache.commons.jexl3.MapContext;
import org.apache.commons.jexl3.internal.Engine;/*** @author zss* @date 2022/3/21 9:28* @Email:451682479@qq.com*/
public class JexlExpressionTest {public static void main(String[] args) throws Exception {JexlEngine engine = new Engine();JexlContext context = new MapContext();String expStr = "array.size()";List<Object> arr = new ArrayList<>();arr.add("this is an array");arr.add(new Integer(2));context.set("array",arr);JexlExpression expression = engine.createExpression(expStr);Object evaluate = expression.evaluate(context);Callable<Object> callable = expression.callable(context);Object call = callable.call();}
}
文件2: script 用法
JexlScriptTest.java
package cn.xuetian.jexl;import org.apache.commons.jexl3.JexlContext;
import org.apache.commons.jexl3.JexlEngine;
import org.apache.commons.jexl3.JexlScript;
import org.apache.commons.jexl3.MapContext;
import org.apache.commons.jexl3.internal.Engine;/*** @author zss* @date 2022/3/21 10:28* @Email:451682479@qq.com*/
public class JexlScriptTest {public static void main(String[] args) {JexlEngine engine = new Engine();JexlContext context = new MapContext();String expStr = "if(a>b){c=a;}else{c=b;}";context.set("a", 1);context.set("b", 2);context.set("c", 0);JexlScript script = engine.createScript(expStr);Object execute = script.execute(context);String s = execute.toString();expStr = "while(a<b){a=a+b;}";JexlScript script1 = engine.createScript(expStr);Object execute1 = script1.execute(context);String s1 = execute1.toString();}
}
文件3:java语法用法
JavaSynxTest.java
package cn.xuetian.jexl;import org.apache.commons.jexl3.JexlContext;
import org.apache.commons.jexl3.JexlEngine;
import org.apache.commons.jexl3.JexlExpression;
import org.apache.commons.jexl3.MapContext;
import org.apache.commons.jexl3.internal.Engine;/*** @author zss* @date 2022/3/21 10:56* @Email:451682479@qq.com*/
public class JavaSynxTest {public static void main(String[] args) {JavaSynxTest test = new JavaSynxTest();test.test1();}public void test1() {JexlEngine engine = new Engine();JexlContext context = new MapContext();Person p = new Person("zhangsan", 11);context.set("person", p);String str = "person.getName()";JexlExpression expression = engine.createExpression(str);Object evaluate = expression.evaluate(context);String s = evaluate.toString();}/*** inner class*/public class Person {private String name;private int age;public Person(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}}
}
文件4: Arithmetic用法
ArithmeticTest.java
package cn.xuetian.jexl;import java.math.BigDecimal;
import org.apache.commons.jexl3.JexlArithmetic;
import org.apache.commons.jexl3.JexlEngine;
import org.apache.commons.jexl3.internal.Engine;/*** @author zss* @date 2022/3/18 17:30* @Email:451682479@qq.com*/
public class ArithmeticTest {public static void main(String[] args) {JexlArithmetic arithmetic = new JexlArithmetic(true);Object add = arithmetic.add(1, 2);System.out.println(add);BigDecimal a = new BigDecimal("3.1256");BigDecimal b = new BigDecimal("3.1256");Object multiply = arithmetic.multiply(a, b);System.out.println(multiply);JexlEngine engine = new Engine();JexlArithmetic arithmetic1 = engine.getArithmetic();Object divide = arithmetic1.divide(a, b);divide.toString();}
}
根据对上述片段的理解,进而可以包装出规则引擎,具体有机会再说。
commons-jexl3 用法示例相关推荐
- Go基础系列:双层channel用法示例
Go channel系列: channel入门 为select设置超时时间 nil channel用法示例 双层channel用法示例 指定goroutine的执行顺序 双层通道的解释见Go的双层通道 ...
- objdump反汇编用法示例
objdump反汇编用法示例 原文:http://blog.csdn.net/zoomdy/article/details/50563680 -d:将代码段反汇编 -S:将代码段反汇编的同时,将反汇编 ...
- python 装饰器 参数-python函数装饰器之带参数的函数和带参数的装饰器用法示例...
本文实例讲述了python函数装饰器之带参数的函数和带参数的装饰器用法.分享给大家供大家参考,具体如下: 1. 函数带多个参数 # 普通的装饰器, 打印函数的运行时间 def decrator(fun ...
- php指定长度 分割整形,php指定长度分割字符串str_split函数用法示例
本文实例讲述了php指定长度分割字符串str_split函数用法.分享给大家供大家参考,具体如下: 示例1:$str = 'abcdefgh'; $arr = str_split($str,2); 运 ...
- Linux find 用法示例
Linux中find常见用法示例 ·find path -option [ -print ] [ -exec -ok command ] {} \; find命令的参数 ...
- mysql教程or怎么用_MySQL中or语句用法示例
1.mysql中or语法的使用,在mysql语法中or使用注意点. 项目遇到坑,遍历发放奖励数据查询错误!!! $sql = 'SELECT * FROM `vvt_spread_doubleegg_ ...
- html兄弟选择器怎么用,CSS的相邻兄弟选择器用法示例讲解
对于有相同父元素的相邻HTML元素查找便可以使用CSS的相邻兄弟选择器,这里我们就来看一下CSS的相邻兄弟选择器用法简单讲解: 可选择紧接在另一个元素后的元素,且二者有相同的父级元素 下面代码中,it ...
- boost::format模块format的基本用法示例
boost::format模块format的基本用法示例 实现功能 C++实现代码 实现功能 boost::format模块format的基本用法示例 C++实现代码 #include "b ...
- boost::format模块format的高级用法示例
boost::format模块format的高级用法示例 实现功能 C++实现代码 实现功能 boost::format模块format的高级用法示例 C++实现代码 #include <ios ...
最新文章
- 表单提交、页面注册案例
- oracle database 9i/10g/11g 编程艺术 源代码下载
- MongoDB PHP数据库查询类
- 使用Xtrabackup进行MySQL备份
- ns-allinone错误锦囊
- android代码打开数据库,Android打开和关闭数据库
- linux dac 的权限,Samba CAP_DAC_OVERRIDE文件权限绕过安全限制漏洞
- 远离复杂公式推导,直接解决共线性
- python---django中form组件(1)简单使用和字段了解
- win10 python ffmpeg推流到b站
- 极坐标xy的转换_极坐标与直角坐标的转化
- 关于applicaiton.yml不是绿叶子图标的处理办法
- element UI 学习
- 晶品特装科创板上市:市值68亿 主打地面无人装备研发与产销
- 回答网友的几个跟帖和感想
- VBA将金额数字转成中文大写
- Shell read命令详解
- 2021-05-24 BUG修改
- outs.write(baos.toByteArray()) 内存溢出
- LM13丨形态量化-动量周期分析