3

GroovyShellオブジェクトを介して評価されたGroovyスクリプトで宣言された関数のリフレクションデータを取得する方法はありますか?具体的には、スクリプト内の関数を列挙し、それらに添付された注釈にアクセスしたいと思います。

4

2 に答える 2

2

これを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");
于 2012-08-20T23:37:15.530 に答える
1

いくつかの実験の後、私はこれが最も簡単な方法であることがわかりました:

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

method配列にはスクリプトで定義されたすべての関数があり、それらから注釈を取得できます。

于 2012-08-21T21:38:59.657 に答える