问题
有一个类MyClass
有一个方法myMethod()
。如何添加一些代码,例如println "hello"
,每次myMethod()
调用之前都会执行的代码?
方法替换示例
我知道可以像这样替换整个方法。
MyClass.metaClass.myMethod = { -> println "myMethod() has been replaced..." }
但是,我不想替换整个方法。我只想在方法之前和之后添加一些代码。
问题
有一个类MyClass
有一个方法myMethod()
。如何添加一些代码,例如println "hello"
,每次myMethod()
调用之前都会执行的代码?
方法替换示例
我知道可以像这样替换整个方法。
MyClass.metaClass.myMethod = { -> println "myMethod() has been replaced..." }
但是,我不想替换整个方法。我只想在方法之前和之后添加一些代码。
你可以做这样的事情:
class MyClass {
String name
String expand() {
"expanded $name"
}
}
// Cache the old expand method
def oldExpand = MyClass.metaClass.getMetaMethod( 'expand', null )
// Create a new one
MyClass.metaClass.expand = { ->
// Do something
println "Pre stuff"
try {
// then invoke and return the original method
oldExpand.invoke( delegate )
}
finally {
// finally doing something else
println "Post stuff"
}
}
def a = new MyClass( name:'tim' )
println "received: " + a.expand()