Jexl表达式引擎的学习(一)

  • Jexl表达式引擎的介绍

Java Expression Language (JEXL) 是一个表达式语言引擎,可以用来在应用或者框架中使用。虽然Jexl受JSP标签库(JSTL)的影响产生的,但不是JSTL中表达式语言的实现。

  • Jexl的应用场景

Jexl表达式引擎可以应用在许多场景下,比如:校验数据,解析模板等

  • Jexl表达式引擎使用总结

1.表达式为列表(数组)时`

public static void main(String args[]){
      JexlEngine engine = new JexlEngine();//创建表达式引擎对象
      JexlContext context = new MapContext();//创建Context设值对象
       String expressionStr = "array.size()";//表达式,表达式可以是数组的属性,元素等
      List<Object> array = new ArrayList<Object> ();//创建一个列表
      array.add("this is an array");
      array.add(new Integer(2));
      context.set("array",array);//使用context对象将表达式中用到的值设置进去,必须是所有用到的值
      Expression expression = engine.createExpression(expressionStr)://使用引擎创建表达式对象
      Object o = expression.evaluate(context);//使用表达式对象开始计算
      System.out.println(o);//输出:2
      }  

2.表达式为语句块时

 		  JexlEngine engine = new JexlEngine();//创建表达式引擎对象
          JexlContext context = new MapContext();//创建Context设值对象
          String expressionStr = "if(a>b){c=a;}else{c=b};";//表达式,表达式为逻辑语句
          context.set("a", 1);
          context.set("b", 2);
          Expression expression = engine.createExpression(expressionStr);//使用引擎创建表达式对象
          Object o = expression.evaluate(context);//使用表达式对象开始计算
          System.out.println(o);//输出:2
          
          expressionStr = "while(a<b){a=a+b;}";
          expression = engine.createExpression(expressionStr);//使用引擎创建表达式对象
          o = expression.evaluate(context);//使用表达式对象开始计算
          System.out.println(o);//输出:3

如上,当表达式为语句块时,经常用在数据校验,当然表达式比现在例子复杂的多。
3.当表达式为调用方法时

 JexlEngine engine = new JexlEngine();//创建表达式引擎对象
          JexlContext context = new MapContext();//创建Context设值对象
          String expressionStr = "person.getInfo()";//表达式,表达式为对象调用方法,当然也可以是类调用方法
          Person person = new Person("hliu","M");
          context.set("person", person);
          Expression expression = engine.createExpression(expressionStr);//使用引擎创建表达式对象
          Object o = expression.evaluate(context);//使用表达式对象开始计算
          //输出:hliu+M
          
          expressionStr = "System.out.println("123123");";//表达式为类调用方法
          expression = engine.createExpression(expressionStr);//使用引擎创建表达式对象
          o = expression.evaluate(context);//使用表达式对象开始计算
          //输出:123123

Person类

public class Person{
  		private String name;
  		private String sex;
  		public Person(String name,String sex){
  		  	 this.name=name;
  		  	 this.sex = sex;
  		 }
  		 public String getInfo(){
  			 return this.name+"+"+this.sex;
  		 }
  }

如果类不声明为Public(公开),引擎会找不到该类。

  • 使用Jexl准备工作
    1.common-jexl2_1.jar
    2.如果使用Maven使用如下依赖
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-jexl3 -->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-jexl3</artifactId>
    <version>3.0</version>
</dependency>

今天只是介绍的jexl少数但是比较常用的几种用法,我会在之后的文章中陆续介绍jexl的其他用法以及应用实现。`

  • 9
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

技术砖家--Felix

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值