Browse Source

add createXXXScript

Looly 5 years ago
parent
commit
c7ce3719e8

+ 1 - 0
CHANGELOG.md

@@ -11,6 +11,7 @@
 * 【core   】     TableMap增加getKeys和getValues方法
 * 【core   】     TableMap增加getKeys和getValues方法
 * 【json   】     JSONObject和JSONArray增加set方法,标识put弃用
 * 【json   】     JSONObject和JSONArray增加set方法,标识put弃用
 * 【http   】     增加SimpleHttpServer
 * 【http   】     增加SimpleHttpServer
+* 【script 】     增加createXXXScript,区别单例
 
 
 ### Bug修复
 ### Bug修复
 * 【extra  】     修复SpringUtil使用devtools重启报错问题
 * 【extra  】     修复SpringUtil使用devtools重启报错问题

+ 1 - 1
hutool-script/src/main/java/cn/hutool/script/JavaScriptEngine.java

@@ -17,7 +17,7 @@ import java.io.Reader;
 public class JavaScriptEngine extends FullSupportScriptEngine {
 public class JavaScriptEngine extends FullSupportScriptEngine {
 
 
 	public JavaScriptEngine() {
 	public JavaScriptEngine() {
-		super(ScriptUtil.getJsEngine());
+		super(ScriptUtil.createJsEngine());
 	}
 	}
 
 
 	/**
 	/**

+ 79 - 26
hutool-script/src/main/java/cn/hutool/script/ScriptUtil.java

@@ -22,29 +22,38 @@ public class ScriptUtil {
 	private static SimpleCache<String, ScriptEngine> cache = new SimpleCache<>();
 	private static SimpleCache<String, ScriptEngine> cache = new SimpleCache<>();
 
 
 	/**
 	/**
-	 * 获得 {@link ScriptEngine} 实例
+	 * 获得单例的{@link ScriptEngine} 实例
 	 *
 	 *
 	 * @param nameOrExtOrMime 脚本名称
 	 * @param nameOrExtOrMime 脚本名称
 	 * @return {@link ScriptEngine} 实例
 	 * @return {@link ScriptEngine} 实例
 	 */
 	 */
 	public static ScriptEngine getScript(String nameOrExtOrMime) {
 	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}
 	 * @return {@link JavaScriptEngine}
 	 */
 	 */
@@ -53,9 +62,9 @@ public class ScriptUtil {
 	}
 	}
 
 
 	/**
 	/**
-	 * 获得 JavaScript引擎
+	 * 获得单例的JavaScript引擎
 	 *
 	 *
-	 * @return Python引擎
+	 * @return Javascript引擎
 	 * @since 5.2.5
 	 * @since 5.2.5
 	 */
 	 */
 	public static ScriptEngine getJsEngine() {
 	public static ScriptEngine getJsEngine() {
@@ -63,7 +72,17 @@ public class ScriptUtil {
 	}
 	}
 
 
 	/**
 	/**
-	 * 获得 Python引擎<br>
+	 * 创建新的JavaScript引擎
+	 *
+	 * @return Javascript引擎
+	 * @since 5.2.6
+	 */
+	public static ScriptEngine createJsEngine() {
+		return createScript("js");
+	}
+
+	/**
+	 * 获得单例的Python引擎<br>
 	 * 需要引入org.python:jython
 	 * 需要引入org.python:jython
 	 *
 	 *
 	 * @return Python引擎
 	 * @return Python引擎
@@ -75,7 +94,19 @@ public class ScriptUtil {
 	}
 	}
 
 
 	/**
 	/**
-	 * 获得Lua引擎<br>
+	 * 创建Python引擎<br>
+	 * 需要引入org.python:jython
+	 *
+	 * @return Python引擎
+	 * @since 5.2.6
+	 */
+	public static ScriptEngine createPythonEngine() {
+		System.setProperty("python.import.site", "false");
+		return createScript("python");
+	}
+
+	/**
+	 * 获得单例的Lua引擎<br>
 	 * 需要引入org.luaj:luaj-jse
 	 * 需要引入org.luaj:luaj-jse
 	 *
 	 *
 	 * @return Lua引擎
 	 * @return Lua引擎
@@ -86,7 +117,18 @@ public class ScriptUtil {
 	}
 	}
 
 
 	/**
 	/**
-	 * 获得Groovy引擎<br>
+	 * 创建Lua引擎<br>
+	 * 需要引入org.luaj:luaj-jse
+	 *
+	 * @return Lua引擎
+	 * @since 5.2.6
+	 */
+	public static ScriptEngine createLuaEngine() {
+		return createScript("lua");
+	}
+
+	/**
+	 * 获得单例的Groovy引擎<br>
 	 * 需要引入org.codehaus.groovy:groovy-all
 	 * 需要引入org.codehaus.groovy:groovy-all
 	 *
 	 *
 	 * @return Groovy引擎
 	 * @return Groovy引擎
@@ -97,10 +139,21 @@ public class ScriptUtil {
 	}
 	}
 
 
 	/**
 	/**
-	 * 执行脚本
+	 * 创建Groovy引擎<br>
+	 * 需要引入org.codehaus.groovy:groovy-all
+	 *
+	 * @return Groovy引擎
+	 * @since 5.2.6
+	 */
+	public static ScriptEngine createGroovyEngine() {
+		return createScript("groovy");
+	}
+
+	/**
+	 * 执行Javascript脚本
 	 *
 	 *
 	 * @param script 脚本内容
 	 * @param script 脚本内容
-	 * @return {@link CompiledScript}
+	 * @return 执行结果
 	 * @throws ScriptRuntimeException 脚本异常
 	 * @throws ScriptRuntimeException 脚本异常
 	 * @since 3.2.0
 	 * @since 3.2.0
 	 */
 	 */
@@ -117,7 +170,7 @@ public class ScriptUtil {
 	 *
 	 *
 	 * @param script  脚本内容
 	 * @param script  脚本内容
 	 * @param context 脚本上下文
 	 * @param context 脚本上下文
-	 * @return {@link CompiledScript}
+	 * @return 执行结果
 	 * @throws ScriptRuntimeException 脚本异常
 	 * @throws ScriptRuntimeException 脚本异常
 	 * @since 3.2.0
 	 * @since 3.2.0
 	 */
 	 */
@@ -134,7 +187,7 @@ public class ScriptUtil {
 	 *
 	 *
 	 * @param script   脚本内容
 	 * @param script   脚本内容
 	 * @param bindings 绑定的参数
 	 * @param bindings 绑定的参数
-	 * @return {@link CompiledScript}
+	 * @return 执行结果
 	 * @throws ScriptRuntimeException 脚本异常
 	 * @throws ScriptRuntimeException 脚本异常
 	 * @since 3.2.0
 	 * @since 3.2.0
 	 */
 	 */
@@ -147,7 +200,7 @@ public class ScriptUtil {
 	}
 	}
 
 
 	/**
 	/**
-	 * 编译脚本
+	 * 编译Javascript脚本
 	 *
 	 *
 	 * @param script 脚本内容
 	 * @param script 脚本内容
 	 * @return {@link CompiledScript}
 	 * @return {@link CompiledScript}
@@ -163,7 +216,7 @@ public class ScriptUtil {
 	}
 	}
 
 
 	/**
 	/**
-	 * 编译脚本
+	 * 编译Javascript脚本
 	 *
 	 *
 	 * @param engine 引擎
 	 * @param engine 引擎
 	 * @param script 脚本内容
 	 * @param script 脚本内容