Groovy のパッケージ名規則を使用して、次のように Java メソッドへの Groovy メソッド呼び出しをインターセプトできます。
package groovy.runtime.metaclass.org.myGang.myPackage
class FooMetaClass extends groovy.lang.DelegatingMetaClass
{
FooMetaClass(MetaClass delegate)
{
super(delegate);
}
public Object getProperty(Object a, String key)
{
return a.someMethod(key)
}
}
クラス Foo のオブジェクトを実際に作成すると、これはうまく機能します。
def myFoo = new Foo()
def fooProperty = myFoo.bar // metaclass invokes myFoo.someMethod("bar")
しかし、Foo がインターフェースであり、その実装へのメソッド呼び出しをインターセプトしたい場合はどうでしょうか?
def myFoo = FooFactory.create() // I don't know what class this will be
fooProperty = myFoo.bar
インターフェイスの既知の実装ごとに DelegatingMetaClass を持たずにこれを達成する方法はありますか?