From c7ce3719e8dbf5d888a67522ab9ac27fe0605967 Mon Sep 17 00:00:00 2001 From: Looly Date: Wed, 1 Apr 2020 15:46:58 +0800 Subject: [PATCH] add createXXXScript --- CHANGELOG.md | 1 + .../cn/hutool/script/JavaScriptEngine.java | 2 +- .../java/cn/hutool/script/ScriptUtil.java | 105 +++++++++++++----- 3 files changed, 81 insertions(+), 27 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 65b329433..3e9258b2f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ * 【core 】 TableMap增加getKeys和getValues方法 * 【json 】 JSONObject和JSONArray增加set方法,标识put弃用 * 【http 】 增加SimpleHttpServer +* 【script 】 增加createXXXScript,区别单例 ### Bug修复 * 【extra 】 修复SpringUtil使用devtools重启报错问题 diff --git a/hutool-script/src/main/java/cn/hutool/script/JavaScriptEngine.java b/hutool-script/src/main/java/cn/hutool/script/JavaScriptEngine.java index c62283d0b..ca776c9d3 100644 --- a/hutool-script/src/main/java/cn/hutool/script/JavaScriptEngine.java +++ b/hutool-script/src/main/java/cn/hutool/script/JavaScriptEngine.java @@ -17,7 +17,7 @@ import java.io.Reader; public class JavaScriptEngine extends FullSupportScriptEngine { public JavaScriptEngine() { - super(ScriptUtil.getJsEngine()); + super(ScriptUtil.createJsEngine()); } /** diff --git a/hutool-script/src/main/java/cn/hutool/script/ScriptUtil.java b/hutool-script/src/main/java/cn/hutool/script/ScriptUtil.java index 991c425c6..637fba93c 100644 --- a/hutool-script/src/main/java/cn/hutool/script/ScriptUtil.java +++ b/hutool-script/src/main/java/cn/hutool/script/ScriptUtil.java @@ -22,29 +22,38 @@ public class ScriptUtil { private static SimpleCache cache = new SimpleCache<>(); /** - * 获得 {@link ScriptEngine} 实例 + * 获得单例的{@link ScriptEngine} 实例 * * @param nameOrExtOrMime 脚本名称 * @return {@link ScriptEngine} 实例 */ public static ScriptEngine getScript(String nameOrExtOrMime) { - return cache.get(nameOrExtOrMime, ()->{ - ScriptEngine engine = manager.getEngineByName(nameOrExtOrMime); - if (null == engine) { - engine = manager.getEngineByExtension(nameOrExtOrMime); - } - if (null == engine) { - engine = manager.getEngineByMimeType(nameOrExtOrMime); - } - if (null == engine) { - throw new NullPointerException(StrUtil.format("Script for [{}] not support !", nameOrExtOrMime)); - } - return engine; - }); + return cache.get(nameOrExtOrMime, ()-> createScript(nameOrExtOrMime)); } /** - * 获得 Javascript引擎 {@link JavaScriptEngine} + * 创建 {@link ScriptEngine} 实例 + * + * @param nameOrExtOrMime 脚本名称 + * @return {@link ScriptEngine} 实例 + * @since 5.2.6 + */ + public static ScriptEngine createScript(String nameOrExtOrMime) { + ScriptEngine engine = manager.getEngineByName(nameOrExtOrMime); + if (null == engine) { + engine = manager.getEngineByExtension(nameOrExtOrMime); + } + if (null == engine) { + engine = manager.getEngineByMimeType(nameOrExtOrMime); + } + if (null == engine) { + throw new NullPointerException(StrUtil.format("Script for [{}] not support !", nameOrExtOrMime)); + } + return engine; + } + + /** + * 获得非单例的 Javascript引擎 {@link JavaScriptEngine} * * @return {@link JavaScriptEngine} */ @@ -53,9 +62,9 @@ public class ScriptUtil { } /** - * 获得 JavaScript引擎 + * 获得单例的JavaScript引擎 * - * @return Python引擎 + * @return Javascript引擎 * @since 5.2.5 */ public static ScriptEngine getJsEngine() { @@ -63,7 +72,17 @@ public class ScriptUtil { } /** - * 获得 Python引擎
+ * 创建新的JavaScript引擎 + * + * @return Javascript引擎 + * @since 5.2.6 + */ + public static ScriptEngine createJsEngine() { + return createScript("js"); + } + + /** + * 获得单例的Python引擎
* 需要引入org.python:jython * * @return Python引擎 @@ -75,7 +94,19 @@ public class ScriptUtil { } /** - * 获得Lua引擎
+ * 创建Python引擎
+ * 需要引入org.python:jython + * + * @return Python引擎 + * @since 5.2.6 + */ + public static ScriptEngine createPythonEngine() { + System.setProperty("python.import.site", "false"); + return createScript("python"); + } + + /** + * 获得单例的Lua引擎
* 需要引入org.luaj:luaj-jse * * @return Lua引擎 @@ -86,7 +117,18 @@ public class ScriptUtil { } /** - * 获得Groovy引擎
+ * 创建Lua引擎
+ * 需要引入org.luaj:luaj-jse + * + * @return Lua引擎 + * @since 5.2.6 + */ + public static ScriptEngine createLuaEngine() { + return createScript("lua"); + } + + /** + * 获得单例的Groovy引擎
* 需要引入org.codehaus.groovy:groovy-all * * @return Groovy引擎 @@ -97,10 +139,21 @@ public class ScriptUtil { } /** - * 执行脚本 + * 创建Groovy引擎
+ * 需要引入org.codehaus.groovy:groovy-all + * + * @return Groovy引擎 + * @since 5.2.6 + */ + public static ScriptEngine createGroovyEngine() { + return createScript("groovy"); + } + + /** + * 执行Javascript脚本 * * @param script 脚本内容 - * @return {@link CompiledScript} + * @return 执行结果 * @throws ScriptRuntimeException 脚本异常 * @since 3.2.0 */ @@ -117,7 +170,7 @@ public class ScriptUtil { * * @param script 脚本内容 * @param context 脚本上下文 - * @return {@link CompiledScript} + * @return 执行结果 * @throws ScriptRuntimeException 脚本异常 * @since 3.2.0 */ @@ -134,7 +187,7 @@ public class ScriptUtil { * * @param script 脚本内容 * @param bindings 绑定的参数 - * @return {@link CompiledScript} + * @return 执行结果 * @throws ScriptRuntimeException 脚本异常 * @since 3.2.0 */ @@ -147,7 +200,7 @@ public class ScriptUtil { } /** - * 编译脚本 + * 编译Javascript脚本 * * @param script 脚本内容 * @return {@link CompiledScript} @@ -163,7 +216,7 @@ public class ScriptUtil { } /** - * 编译脚本 + * 编译Javascript脚本 * * @param engine 引擎 * @param script 脚本内容