JEXL表达式引擎学习demo

  1. MAVEN信息
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-jexl</artifactId>
            <version>2.1.1</version>
        </dependency>
  1. 实体类
package com.skindow.jexl;

import lombok.Data;
import lombok.extern.slf4j.Slf4j;

import java.util.*;

/**
 * @ Author     :syc.
 * @ Date       :Created in 14:08 2020/9/10
 * @ Description:
 * @ Modified By:
 * @ Version:
 */
@Data
@Slf4j
public abstract class AbstractPerson {
    /**
     * 工作时间
     */
    public static List<String> WORK_TIME = Arrays.asList("09:00", "18:00");

    /**
     * 姓名
     */
    private String name;

    /**
     * 年龄
     */
    private Integer age;

    /**
     * 性别
     */
    private Gender gender;

    /**
     * 工作
     */
    public void work(Date date) {
        Date now = new Date();
        if (!Objects.isNull(date)) {
            now = date;
        }
        Date startWorkTime = getWorkTime(WORK_TIME.get(0));
        Date stopWorkTime = getWorkTime(WORK_TIME.get(1));

        if (now.getTime() < startWorkTime.getTime()) {
            log.info("{} 还未开始工作", this.name);
        } else if (now.getTime() <= stopWorkTime.getTime()) {
            working();
        } else {
            stopWork();
        }
    }

    private Date getWorkTime(String startWorkTime) {
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.HOUR_OF_DAY, Integer.parseInt(startWorkTime.split(":")[0]));
        calendar.set(Calendar.MINUTE, Integer.parseInt(startWorkTime.split(":")[1]));
        return calendar.getTime();
    }

    /**
     * 停止工作
     */
    public abstract void stopWork();

    /**
     * 正在工作
     */
    public abstract void working();

    public enum Gender {

        /**
         * 男
         */
        BOY("男"),
        /**
         * 女
         */
        GIRL("女");
        private String gender;

        Gender(String str) {
        }
    }
}

  1. 测试类
package com.skindow.jexl;

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.jexl2.JexlContext;
import org.apache.commons.jexl2.JexlEngine;
import org.apache.commons.jexl2.MapContext;
import org.apache.ibatis.jdbc.Null;
import org.springframework.util.StringUtils;

/**
 * @ Author     :syc.
 * @ Date       :Created in 11:33 2020/9/10
 * @ Description:
 * @ Modified By:
 * @ Version:
 */
@Slf4j
public class JexlTest {
    public static void main(String[] args) {
        JexlEngine engine = new JexlEngine();
        String testStr = "测试";
        JexlContext context = new MapContext();
        String jexlTest = "StringUtils.isEmpty(value)";
        context.set("value",testStr);
        context.set("StringUtils",StringUtils.class);
        boolean evaluate = (boolean) engine.createExpression(jexlTest).evaluate(context);
        log.info("\n 字符 【{}】是否为空 :{} ",testStr,evaluate ? "是":"不是");


        AbstractPerson xm = new AbstractPerson() {
            @Override
            public void stopWork() {
                log.info("\n{} 已经准备在下班了", this.getName());
            }

            @Override
            public void working() {
                log.info("\n{} 正在开会", this.getName());
            }
        };
        context = new MapContext();
        String personWorkJexl = "AbstractPerson.work(date)";
        context.set("AbstractPerson",xm);
        context.set("date", null);
        String personAgeIsAdult = "AbstractPerson.age >= 18";
        xm.setAge(19);
        xm.setGender(AbstractPerson.Gender.BOY);
        xm.setName("小明");
        engine.createExpression(personWorkJexl).evaluate(context);
        boolean isAdult = (boolean)engine.createExpression(personAgeIsAdult).evaluate(context);
        log.info("\n {} 是否成年 : {}",xm.getName(),isAdult ? "是": "还没");

    }
}

  1. 输出结果
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值