在Java中使用Rhino, 能讓你使用相似Groovy, ECMAScript...等等之類的不一樣動態腳本語言, 其中值得推薦的是ECMAScript, 它是Rhino的默認實現, 同時也在JDK1.6中集成了.
使用ScriptEngine的時候, 還有二個接口, 看似不相關, 倒是很是有用. 一個是Invocable, 一個是Compilable, 前者能從Java回調ECMAScript中的Function或者object, 後者能將ECMAScript腳本編譯, 從而提高3~4倍性能, 這個係數不是固定的, 會隨腳本的複雜度成正比.
在寫ECMAScript的時候,
(1)存在ScriptContext中的attribute, 能夠直接經過name引用.
(2)對於JavaBean的setter/getter能夠直接引用property.
(3)對於類, 能夠省略new運算符以及package.
但要注意, 像Map, List, Array這些必須非JavaBean的對象在Script中必須使用get(), put(), add()之類的方法來取存元素. 這讓人很不爽, 不能像EL或者FreeMarker之類的語法. 但也沒什麼, 直接引用方法倒更像Java的語法.
public static void main(String[] args) throws ScriptException {
Map<String, Object> params = new HashMap<String, Object>();
params.put("test", "這是一個小小的測試...");
Bindings bindings = new SimpleBindings();
bindings.put("params", params);
Object result = engine.eval("println(params.get('test'));", bindings);性能
System.out.println(result);
}測試