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