java string字符串动态编译执行
需求
在业务中,需要将从数据库中读取到的某字段值当作java代码去执行并获取到结果,根据该结果再继续后续的业务。
解决方案
依赖
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-jexl3</artifactId>
<version>3.1</version>
</dependency>
核心代码
public class Utils {
private static JexlEngine jexlEngine = new Engine();
public static Object executeExpression(String jexlExpression, Map<String, Object> map) {
JexlExpression expression = jexlEngine.createExpression(jexlExpression);
JexlContext context = new MapContext();
if (map != null && !map.isEmpty()) {
map.forEach(context::set);
}
return expression.evaluate(context);
}
}
测试main方法执行
public static void main(String args[]){
Map<String,Object> map=new HashMap<String,Object>();
JSONObject jsonObject = new JSONObject();
jsonObject.put("data","shenme");
map.put("result",jsonObject);
String expression="result.toString()";
Object code = executeExpression(expression,map);
System.err.println(code);
}
输出结果
string字符串被识别为java代码进行了动态编译!成功!