Groovy MOP调用方法
我试图理解invokeMethod如何在Groovy中拦截方法调用。不过,我似乎无法让最基本的例子发挥作用Groovy MOP调用方法,groovy,Groovy,我试图理解invokeMethod如何在Groovy中拦截方法调用。不过,我似乎无法让最基本的例子发挥作用 class Person implements GroovyInterceptable { def invokeMethod(String name,args) { println "called invokeMethod $name $args" } def greet() { println "Hello from greet
class Person implements GroovyInterceptable {
def invokeMethod(String name,args) {
println "called invokeMethod $name $args"
}
def greet() {
println "Hello from greet()"
}
}
def p = new Person()
p.greet()
如果我尝试运行这个示例,我会得到以下错误。我错过了什么
Caught: java.lang.StackOverflowError
java.lang.StackOverflowError
at Person.invokeMethod(Person.groovy:4)
at Person.invokeMethod(Person.groovy:4)
at Person.invokeMethod(Person.groovy:4)
...
截取后,需要从
invokeMethod
调用实际方法
class Person implements GroovyInterceptable {
def invokeMethod(String name,args) {
System.out.println "called invokeMethod $name $args"
metaClass.getMetaMethod(name, args).invoke(this, args)
}
def greet() {
System.out.println "Hello from greet()"
}
}
def p = new Person()
p.greet()
是的,关于
println
你是正确的。必须使用SOP 在拦截之后,您需要从invokeMethod
调用实际方法
class Person implements GroovyInterceptable {
def invokeMethod(String name,args) {
System.out.println "called invokeMethod $name $args"
metaClass.getMetaMethod(name, args).invoke(this, args)
}
def greet() {
System.out.println "Hello from greet()"
}
}
def p = new Person()
p.greet()
是的,关于
println
你是正确的。必须使用SOP println是Groovy对象上的一个方法,它被捕获,因此将我发送到一个无限循环中。使用System.out.println(不受我们的拦截点影响)修复了该问题。感谢Venkat(编程Groovy 2),println是Groovy对象上的一个方法,它被捕获了,因此将我送入了一个无限循环。使用System.out.println(不受我们的拦截点影响)修复了该问题。感谢Venkat(编程Groovy 2)