Interface Groovy:为接口委派元类?

Interface Groovy:为接口委派元类?,interface,groovy,metaprogramming,metaclass,Interface,Groovy,Metaprogramming,Metaclass,使用Groovy的包名约定,我可以拦截对Java方法的Groovy方法调用,如下所示: package groovy.runtime.metaclass.org.myGang.myPackage class FooMetaClass extends groovy.lang.DelegatingMetaClass { FooMetaClass(MetaClass delegate) { super(delegate); } public Obje

使用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?

您可以创建一个名为“groovy.runtime.metaclass.CustomMetaClassCreationHandle”的类来全局处理元类创建过程

在此类中,可以重写此方法:

protected MetaClass createNormalMetaClass(Class theClass, MetaClassRegistry registry) {
  // if theClass instanceof Foo, return your special metaclass
  // else return super.createNormalMetaClass(theClass, registry)
}