反思Groovy脚本中声明的函数(Reflect on functions declared in

2019-09-21 10:08发布

有没有一种方法,以获得对已通过评估Groovy脚本中声明的函数反射数据GroovyShell对象? 具体而言,我想枚举重视他们的脚本和访问注释功能。

Answer 1:

这个 Groovy脚本的最后一行-它将作为从脚本,一拉返回值:

 // 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");


Answer 2:

一些试验后,我发现这是最简单的方法:

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

method阵列拥有所有的脚本中定义的功能,我可以从他们那里得到的注解。



文章来源: Reflect on functions declared in a Groovy script