java脚本引擎groovy,Java 利用脚本API运行Groovy脚本的方式

import java.io.Reader;

import java.util.HashMap;

import java.util.Map;

import javax.script.Bindings;

import javax.script.Invocable;

import javax.script.ScriptEngine;

import javax.script.ScriptEngineManager;

import javax.script.ScriptException;

/**

* 执行脚本工具

*

* Created by xuyh at 2017年7月18日 上午11:05:49.

*/

public class ScriptUtils {

/**

* 脚本语言groovy

*/

public static final String SCRIPT_GROOVY = "groovy";

/**

* 脚本语言javascript

*/

public static final String SCRIPT_JAVASCRIPT = "javaScript";

private static ScriptEngineManager engineManager = new ScriptEngineManager();

/**

* 脚本引擎缓存

*/

private static Map scriptEngineMap = new HashMap<>();

/**

* 获取脚本引擎

*

* @param scriptLang 脚本语言 (groovy, javaScript, etc.)

* @return

*/

public static ScriptEngine getEngine(String scriptLang) {

ScriptEngine engine = scriptEngineMap.get(scriptLang);

if (engine == null) {

engine = engineManager.getEngineByName(scriptLang);

scriptEngineMap.put(scriptLang, engine);

}

return engine;

}

/**

* 执行脚本中的方法

*

* @param scriptLang 脚本语言

* @param script 需要执行的脚本文本

* @param bindings 给脚本设置的全局变量数据

* @param functionName 执行的方法名

* @return

* @throws ScriptException

* @throws NoSuchMethodException

*/

public static Object invokeScriptFunction(String scriptLang, String script, String functionName,

Map bindings)

throws ScriptException, NoSuchMethodException {

ScriptEngine engine = getEngine(scriptLang);

Bindings data = engine.createBindings();

for (String key : bindings.keySet()) {

data.put(key, bindings.get(key));

}

engine.eval(script, data);

return ((Invocable) engine).invokeFunction(functionName);

}

/**

* 执行脚本中的方法

*

* @param scriptLang 脚本语言

* @param script 需要执行的脚本文本

* @param args 执行脚本方法传入的参数

* @param functionName 执行的方法名

* @return

* @throws ScriptException

* @throws NoSuchMethodException

*/

public static Object invokeScriptFunction(String scriptLang, String script, String functionName, Object... args)

throws ScriptException, NoSuchMethodException {

ScriptEngine engine = getEngine(scriptLang);

engine.eval(script);

return ((Invocable) engine).invokeFunction(functionName, args);

}

/**

* 执行脚本中的方法

*

* @param scriptLang 脚本语言

* @param bindings 给脚本设置的全局变量数据

* @param script 需要执行的脚本文本

* @param args 执行脚本方法传入的参数

* @param functionName 执行的方法名

* @return

* @throws ScriptException

* @throws NoSuchMethodException

*/

public static Object invokeScriptFunction(String scriptLang, Map bindings, String script,

String functionName,

Object... args) throws ScriptException, NoSuchMethodException {

ScriptEngine engine = getEngine(scriptLang);

Bindings data = engine.createBindings();

for (String key : bindings.keySet()) {

data.put(key, bindings.get(key));

}

engine.eval(script, data);

return ((Invocable) engine).invokeFunction(functionName, args);

}

/**

* 执行脚本中的方法

*

* @param scriptLang 脚本语言

* @param reader 需要执行的脚本文件

* @param bindings 给脚本设置的全局变量数据

* @param functionName 执行的方法名

* @return

* @throws ScriptException

* @throws NoSuchMethodException

*/

public static Object invokeFileScriptFunction(String scriptLang, Reader reader, String functionName,

Map bindings)

throws ScriptException, NoSuchMethodException {

ScriptEngine engine = getEngine(scriptLang);

Bindings data = engine.createBindings();

for (String key : bindings.keySet()) {

data.put(key, bindings.get(key));

}

engine.eval(reader, data);

return ((Invocable) engine).invokeFunction(functionName);

}

/**

* 执行脚本中的方法

*

* @param scriptLang 脚本语言

* @param reader 需要执行的脚本文件

* @param args 执行脚本方法传入的参数

* @param functionName 执行的方法名

* @return

* @throws ScriptException

* @throws NoSuchMethodException

*/

public static Object invokeFileScriptFunction(String scriptLang, Reader reader, String functionName, Object... args)

throws ScriptException, NoSuchMethodException {

ScriptEngine engine = getEngine(scriptLang);

engine.eval(reader);

return ((Invocable) engine).invokeFunction(functionName, args);

}

/**

* 执行脚本中的方法

*

* @param scriptLang 脚本语言

* @param bindings 给脚本设置的全局变量数据

* @param reader 需要执行的脚本文件

* @param args 执行脚本方法传入的参数

* @param functionName 执行的方法名

* @return

* @throws ScriptException

* @throws NoSuchMethodException

*/

public static Object invokeFileScriptFunction(String scriptLang, Map bindings, Reader reader,

String functionName,

Object... args) throws ScriptException, NoSuchMethodException {

ScriptEngine engine = getEngine(scriptLang);

Bindings data = engine.createBindings();

for (String key : bindings.keySet()) {

data.put(key, bindings.get(key));

}

engine.eval(reader, data);

return ((Invocable) engine).invokeFunction(functionName, args);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值