Java脚本引擎/动态脚本/表达式引擎
使用场景
- 代码热更新
- 处理需要灵活配置且不断变更的动态业务规则
- 复杂的规则匹配
Groovy引擎
- 在资源目录下新建
。/groovy/hello.groovy
package groovy
def sayHello(name) {
println name + "向你说 “你好!!”";
def date = new Date();
return "success sayHello()+test groovy" + date;
}
sayHello('asda');
- java代码执行groovy脚本。
GroovyScriptEngine scriptEngine = new GroovyScriptEngine(GroovyMain.class.getResource("/groovy").getPath());
Binding binding = new Binding();
scriptEngine.run("hello.groovy", binding);
JavaScript Engine
示例1
@Test
public void t1() throws ScriptException {
ScriptEngineManager manager = new ScriptEngineManager();
// 建立javascript脚本引擎
ScriptEngine engine = manager.getEngineByName("javascript");
engine.put("list", Arrays.asList("111", "222", "3333"));
engine.put("str", "111");
Object res = engine.eval("list.contains(str)");
System.out.println(res);
}
示例2
@Test
public void t2() throws ScriptException {
ScriptEngineManager manager = new ScriptEngineManager();
// 建立javascript脚本引擎
ScriptEngine engine = manager.getEngineByName("javascript");
String scoreScript = "function getScore(score){if (score>85) {return '优秀'} else if (score>60) {return '及格'} else {return '不及格'}} getScore(33);";
Compilable compilable = (Compilable) engine;
CompiledScript compile = compilable.compile(scoreScript);
Object res = compile.eval();
System.out.println(res);
}
示例3
@Test
public void t3() throws Exception {
ScriptEngineManager manager = new ScriptEngineManager();
// 建立javascript脚本引擎
ScriptEngine engine = manager.getEngineByName("javascript");
String scoreScript = "function getScore(score){if (score>85) {return '优秀'} else if (score>60) {return '及格'} else {return '不及格'}}";
engine.eval(scoreScript);
Object score = ((Invocable) engine).invokeFunction("getScore", 87);
System.out.println(score);
}