有没有一种方法,以获得对已通过评估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