0
我試圖用Groovy AOP方法增強我的Grails項目。但是,如果我用閉包覆蓋invokeMethod,我總是得到StackOverflowError。這裏是我的測試代碼,我可以用groovy 2.1.3重現錯誤,謝謝!Groovy:用覆蓋率覆蓋invokeMethod時出現StackOverflowError
class A implements GroovyInterceptable
{
void foo(){
System.out.println("A.foo");
}
}
class B extends A
{
void foo(){
System.out.println("B.foo");
super.foo();
}
}
def mc = B.metaClass;
mc.invokeMethod = { String name, args ->
// do "before" and/or "around" work here
try {
def value = mc.getMetaMethod(name, args).invoke(delegate, args)
// do "after" work here
return value // or another value
}
catch (e) {
// do "after-throwing" work here
}
}
B b = new B();
b.foo();
它的工作原理就像一個魅力!根據MetaClassImpl的源代碼,您指出,我想你確實是對的,我們應該總是在實現GroovyInterceptable的類中重寫invokeMethod。 –