我有 3 个关于在 java 中使用 Groovy 的问题。它们都是相关的,所以我在这里只提出一个问题。
1)有:GroovyClassLoader、GroovyShell、GroovyScriptEngine。但是使用它们有什么区别呢?
例如对于此代码:
static void runWithGroovyShell() throws Exception {
new GroovyShell().parse(new File("test.groovy")).invokeMethod("hello_world", null);
}
static void runWithGroovyClassLoader() throws Exception {
Class scriptClass = new GroovyClassLoader().parseClass(new File("test.groovy"));
Object scriptInstance = scriptClass.newInstance();
scriptClass.getDeclaredMethod("hello_world", new Class[]{}).invoke(scriptInstance, new Object[]{});
}
static void runWithGroovyScriptEngine() throws Exception {
Class scriptClass = new GroovyScriptEngine(".").loadScriptByName("test.groovy");
Object scriptInstance = scriptClass.newInstance();
scriptClass.getDeclaredMethod("hello_world", new Class[]{}).invoke(scriptInstance, new Object[]{});
}
2)加载groovy脚本的最佳方法是什么,以便它以编译形式保留在内存中,然后我可以在需要时调用该脚本中的函数。
3)如何将我的 java 方法/类公开给 groovy 脚本,以便它可以在需要时调用它们?