我喜欢用泛型的方式包装一个类的所有方法。所以我假设我不知道这个类实现的方法,而且AOP也不是一种选择。
Groovy元编程允许重新定义方法,甚至可以使用参数,但是当您从反射获得参数列表时,如何做到这一点呢?
someClass.metaClass.methods.each { method ->
someClass.metaClass.'${method.name}' = { /* how to define parameters knowing I get them from method.parameterTypes */
}
}提前感谢你的帮助。
发布于 2013-04-04 19:48:51
那invokeMethod呢?
更新:正如@Tim评论的那样,您可以使用getMetaMethod来执行旧方法:
class A {
def methodA(String a) { "executing methodA..." }
def methodB(String b, Float c) {}
def methodC() {}
}
A.metaClass.invokeMethod = { String method, args ->
def ret = delegate.class.metaClass.getMetaMethod(method, args)?.invoke( delegate, args )
"[intercepted $method] $ret"
}
def a = new A()
assert a.methodA("a") == "[intercepted methodA] executing methodA..."https://stackoverflow.com/questions/15807763
复制相似问题