- MAVEN信息
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-jexl</artifactId>
<version>2.1.1</version>
</dependency>
- 实体类
package com.skindow.jexl;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import java.util.*;
@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) {
}
}
}
- 测试类
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;
@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 ? "是": "还没");
}
}
- 输出结果