【问题标题】:How to add pre and post code to a method with Groovy meta programming?如何使用 Groovy 元编程将前后代码添加到方法中?
【发布时间】:2013-02-02 21:10:51
【问题描述】:
问题
有一个类MyClass 和一个方法myMethod()。如何添加一些代码,例如println "hello",每次调用myMethod() 之前都会执行?
方法替换示例
我知道可以像这样替换整个方法。
MyClass.metaClass.myMethod = { -> println "myMethod() has been replaced..." }
但是,我不想替换整个方法。我只是想在方法之前和之后添加一些代码。
【问题讨论】:
标签:
groovy
metaprogramming
【解决方案1】:
你可以做这样的事情:
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()