在运行时在java中执行Groovy代码
是否可以执行在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代码?或者,您可能会建议我采取其他方法来实现此目的。
是的,你可以这样做。
见链接http://groovy.codehaus.org/Embedding+Groovy
您可能需要谨慎使用这种方法,因为执行存储在数据库中的代码将在您的应用程序带来安全漏洞。例如,在数据库中以恶意方式插入文本的代码几乎可以做任何事情,除非您正在检查它。
是的,您可以使用Groovy脚本引擎在执行时评估Groovy源代码 - 当然,源代码可以是字符串替换的结果。
从我记得,有各种方式可以完成这一点,这将有不同的优点和缺点。
<插件> 有关更多详细信息,请参阅Groovy in Action的第11章。 < /插头>
另一种方法是使用JavaScript代替Groovy。为什么?因为Rhino JavaScript engine already comes with the JDK。所以如果你没有在你的项目中使用Groovy,那么它就不那么依赖。
嗯,好主意考虑到我没有在项目中使用Groovy。谢谢。 – Vladimir 2010-06-22 13:46:55
执行不可信代码时,最好使用一些沙箱,如[groovy-sandbox](http://groovy-sandbox.kohsuke.org/) – Will 2014-09-23 12:37:30