代码动态执行脚本的场景随处可见,我是通过注解动态加载操作日志信息。通过参数的值,让日志更加明确。
ScriptEngine是Java执行js的引擎,实例化引擎:
ScriptEngine engine = new ScriptEngineManager().getEngineByName("javascript");
定义脚本方法:
String functionStr = "function execute(arg){ return arg;}";
编译:
engine.eval(functionStr); //编译
执行:
String result = ((Invocable) engine).invokeFunction("方法名", 方法参数列表); //执行
示例:
@Test
public void testEngine() {
String regular = "function regular(args1, args2, args3){return args1=='aaa'? args2:args3;}"; //定义脚本方法
ScriptEngine engine = new ScriptEngineManager().getEngineByName("javascript"); //创建引擎实例
Object result = "";
try {
engine.eval(regular); //编译
if (engine instanceof Invocable) {
result = ((Invocable) engine).invokeFunction("regular", "aaa", "bbb", "ccc"); // 执行方法
System.out.println(result);
}
} catch (Exception e) {
System.out.println("表达式runtime错误:" + e.getMessage());
}
}
执行结果: