2010-06-22 127 views
3

是否可以执行在java应用程序中动态加载的groovy代码。 例如有含有小片的常规码,像一个数据库表:在运行时在java中执行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代码?或者,您可能会建议我采取其他方法来实现此目的。

回答

10

是的,你可以这样做。

见链接http://groovy.codehaus.org/Embedding+Groovy

您可能需要谨慎使用这种方法,因为执行存储在数据库中的代码将在您的应用程序带来安全漏洞。例如,在数据库中以恶意方式插入文本的代码几乎可以做任何事情,除非您正在检查它。

+2

执行不可信代码时,最好使用一些沙箱,如[groovy-sandbox](http://groovy-sandbox.kohsuke.org/) – Will 2014-09-23 12:37:30

1

是的,您可以使用Groovy脚本引擎在执行时评估Groovy源代码 - 当然,源代码可以是字符串替换的结果。

从我记得,有各种方式可以完成这一点,这将有不同的优点和缺点。

<插件> 有关更多详细信息,请参阅Groovy in Action的第11章。 < /插头>

2

从Java 6中您可以使用Java Scripting API做到这一点。 Java脚本API允许您在Java应用程序中使用各种脚本语言。

你可以找到更多关于Java脚本here

4

另一种方法是使用JavaScript代替Groovy。为什么?因为Rhino JavaScript engine already comes with the JDK。所以如果你没有在你的项目中使用Groovy,那么它就不那么依赖。

+0

嗯,好主意考虑到我没有在项目中使用Groovy。谢谢。 – Vladimir 2010-06-22 13:46:55