这个库可以用来做强大无比的规则引擎,懂的都懂,不理解的多说也无用。

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 用法示例相关推荐

  1. Go基础系列:双层channel用法示例

    Go channel系列: channel入门 为select设置超时时间 nil channel用法示例 双层channel用法示例 指定goroutine的执行顺序 双层通道的解释见Go的双层通道 ...

  2. objdump反汇编用法示例

    objdump反汇编用法示例 原文:http://blog.csdn.net/zoomdy/article/details/50563680 -d:将代码段反汇编 -S:将代码段反汇编的同时,将反汇编 ...

  3. python 装饰器 参数-python函数装饰器之带参数的函数和带参数的装饰器用法示例...

    本文实例讲述了python函数装饰器之带参数的函数和带参数的装饰器用法.分享给大家供大家参考,具体如下: 1. 函数带多个参数 # 普通的装饰器, 打印函数的运行时间 def decrator(fun ...

  4. php指定长度 分割整形,php指定长度分割字符串str_split函数用法示例

    本文实例讲述了php指定长度分割字符串str_split函数用法.分享给大家供大家参考,具体如下: 示例1:$str = 'abcdefgh'; $arr = str_split($str,2); 运 ...

  5. Linux find 用法示例

    Linux中find常见用法示例 ·find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} \; find命令的参数 ...

  6. mysql教程or怎么用_MySQL中or语句用法示例

    1.mysql中or语法的使用,在mysql语法中or使用注意点. 项目遇到坑,遍历发放奖励数据查询错误!!! $sql = 'SELECT * FROM `vvt_spread_doubleegg_ ...

  7. html兄弟选择器怎么用,CSS的相邻兄弟选择器用法示例讲解

    对于有相同父元素的相邻HTML元素查找便可以使用CSS的相邻兄弟选择器,这里我们就来看一下CSS的相邻兄弟选择器用法简单讲解: 可选择紧接在另一个元素后的元素,且二者有相同的父级元素 下面代码中,it ...

  8. boost::format模块format的基本用法示例

    boost::format模块format的基本用法示例 实现功能 C++实现代码 实现功能 boost::format模块format的基本用法示例 C++实现代码 #include "b ...

  9. boost::format模块format的高级用法示例

    boost::format模块format的高级用法示例 实现功能 C++实现代码 实现功能 boost::format模块format的高级用法示例 C++实现代码 #include <ios ...

最新文章

  1. 表单提交、页面注册案例
  2. oracle database 9i/10g/11g 编程艺术 源代码下载
  3. MongoDB PHP数据库查询类
  4. 使用Xtrabackup进行MySQL备份
  5. ns-allinone错误锦囊
  6. android代码打开数据库,Android打开和关闭数据库
  7. linux dac 的权限,Samba CAP_DAC_OVERRIDE文件权限绕过安全限制漏洞
  8. 远离复杂公式推导,直接解决共线性
  9. python---django中form组件(1)简单使用和字段了解
  10. win10 python ffmpeg推流到b站
  11. 极坐标xy的转换_极坐标与直角坐标的转化
  12. 关于applicaiton.yml不是绿叶子图标的处理办法
  13. element UI 学习
  14. 晶品特装科创板上市:市值68亿 主打地面无人装备研发与产销
  15. 回答网友的几个跟帖和感想
  16. VBA将金额数字转成中文大写
  17. Shell read命令详解
  18. 2021-05-24 BUG修改
  19. outs.write(baos.toByteArray()) 内存溢出
  20. LM13丨形态量化-动量周期分析

热门文章

  1. Ubuntu20.04使用过程中总是弹出检测到系统程序出现问题的解决方法
  2. 山东大学暑期项目实训-基于信用评分卡算法模型的个人信用评级系统的设计与实现-第三周-8(7月14日)
  3. 图论将大脑作为一个大型复杂网络的分析——如何构建功能性、结构性脑网络,全局属性,局部属性指标计算
  4. Linux运维方向文章汇总
  5. picsart旧版本_PicsArt美易
  6. HFUT雨课堂形式与政策试题查询
  7. [Win32]纯资源DLL
  8. python的沙盒环境--virtualenv
  9. 解决animate.css在谷歌浏览器下无效
  10. Terrain方案比较