0
Groovy AOP 방식으로 Grails 프로젝트를 향상 시키려고합니다. 그러나 closure를 사용하여 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를 항상 오버라이드해야한다고 생각합니다. –