2010-06-22 133 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