是否可以执行在java应用程序中动态加载的groovy代码。 例如,有一个数据库表,其中包含一小段groovy代码,如:
def test(${val_to_insert_from_java}){
if (${val_to_insert_from_java} > 10){
return true;
}
return false;
}
${val_to_insert_from_java}
是一个占位符,表示在执行java代码时会插入一些实际值,例如:
String groovyFuncSource = getFromDb();
groovyFuncSource.replace(${val_to_insert_from_java}, 9);
Object result = <evaluate somehow groovyFuncSource>;
有没有办法评估这样的Groovy代码?或者你可能会告诉我一些其他方法如何实现这一点。
答案 0 :(得分:10)
是的,你可以这样做。
请参阅链接http://groovy.codehaus.org/Embedding+Groovy
您可能需要谨慎使用此方法,因为执行存储在数据库中的代码会在应用程序中引入安全漏洞。例如,一些恶意插入数据库中的文本代码几乎可以做任何事情,除非您正在检查它。
答案 1 :(得分:4)
另一种方法是使用JavaScript而不是Groovy。为什么?因为Rhino JavaScript engine already comes with the JDK。因此,如果您尚未在项目中使用Groovy,那么它的依赖性会降低一个。
答案 2 :(得分:2)
从Java 6开始,您可以使用Java Scripting API来执行此操作。 Java脚本API允许您在Java应用程序中使用各种脚本语言。
您可以找到有关Java Scripting here的更多信息。
答案 3 :(得分:1)
是的,您可以使用Groovy脚本引擎在执行时评估Groovy源代码 - 当然,源代码可能是字符串替换的结果。
从我记忆中,你可以通过各种方式实现这一目标,这将有不同的优点和缺点。
&LT;塞&GT; 有关详细信息,请参阅Groovy in Action的第11章。 &LT; /插头&GT;