反思Groovy脚本中声明的函数

时间:2012-08-20 19:34:39

标签: java reflection groovy

有没有办法获取已通过GroovyShell对象评估的Groovy脚本中声明的函数的反射数据?具体来说,我想枚举脚本中的函数并访问附加到它们的注释。

2 个答案:

答案 0 :(得分:2)

this 放到Groovy脚本的最后一行 - 它将作为脚本的返回值,a-la:

 // x.groovy
 def foo(){}
 def bar(){}
 this

然后,您可以从Java代码执行以下操作:

 GroovyShell shell = new GroovyShell();
 Script script = (Script) shell.evaluate(new File("x.groovy"));

现在似乎没有选择直接从Java反省Groovy脚本的注释。但是,您可以在同一个Groovy脚本中实现一个方法,并从Java代码中调用该方法,例如:

//groovy
def test(String m){
  method = x.getMethod(m, [] as Class[])
  assert method.isAnnotationPresent(X)
}

//java
script.getMetaClass().invokeMethod(script, "test", "foo");

答案 1 :(得分:1)

经过一些实验,我发现这是最简单的方法:

GroovyShell shell = new GroovyShell();
Script script = (Script)shell.parse(new FileReader("x.groovy"));
Method[] methods = script.getClass().getMethods();

method数组具有脚本中定义的所有函数,我可以从中获取注释。