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);
}