在运行时在java中执行Groovy代码

时间:2010-06-22 13:17:03

标签: java dynamic groovy runtime eval

是否可以执行在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代码?或者你可能会告诉我一些其他方法如何实现这一点。

4 个答案:

答案 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;