java追加CompiledScript或添加两个CompiledScript
您好,我正在使用Groovy
引擎来评估某个脚本。问题是执行时间有点大,所以我想把我的脚本分成两个脚本。第一个是静态的,可以在@PostConstruct
方法中编译;第二个是变量,它取决于用户选择的一些参数。这就是我想做的:
Bindings bindings;
CompiledScript scriptC;
String script1="Static Script";
String script2="Variable Script";
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("groovy");
scriptC = ((Compilable) engine).compile(script1);
//Execute some instruction to generate 'script2'
scriptC += ((Compilable) engine).compile(script2);//Please note the += operator
或
Bindings bindings;
CompiledScript scriptC;
String script1="Static Script";
String script2="Variable Script";
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("groovy");
scriptC = ((Compilable) engine).compile(script1);
//Execute some instruction to generate 'script2'
scriptC.append(((Compilable) engine).compile(script2));//Please note the append function
这两个代码肯定不能工作,我使用它们只是为了说明我正在尝试做什么。是否可以将两个脚本合并为一个脚本
# 1 楼答案
不能像那样组合两个
考虑在分离中评估两个脚本作为备选方案。请看以下示例:CompiledScript
对象。如果是Groovy,当Groovy脚本被编译时,它会创建一个扩展groovy.lang.Script
的类,其中包含一些方法。在这种情况下,向彼此添加两个脚本意味着合并两个Java类创建
CompiledScript
对象是一回事。第二件事是评估这些脚本。如果您总是立即对script1
和script2
进行评估,那么您只需要:但是
script1
可能会返回一些值,根据该值,您可以决定是否应该对script2
进行评估。假设script1
返回一个Integer
,我将仅在返回值大于1时计算script2
:或者,您可以在运行
script1
之后基于绑定值。假设script1
修改绑定a
和b
,并将两者设置为true
(假设它们持有boolean
类型):从
调用script2
script1
中定义的函数假设
script1
的定义如下:如果您必须在
script2
内调用json(map)
函数,您可以这样做。看看这个例子:script2
定义为:运行时,您将在控制台中看到:
前两行来自
script1
,而最后一行由script2
生成。请记住,这两个CompiledScript
都包含对同一个引擎的引用,因此您可以引用在先前评估的脚本中定义的函数