在Groovy中有没有办法装饰每个类来添加跟踪?
发布时间:2020-12-14 16:24:17 所属栏目:大数据 来源:网络整理
导读:当我进入方法调用时,我将如何进行每个groovy类的每个方法调用打
|
当我进入方法调用时,我将如何进行每个groovy类的每个方法调用打印“输入${methodname}”?
无需包装我使用新的TracingDecorator(new Object())创建的每个新对象? 解决方法
您需要在所有类上覆盖metaClass.invokeMethod,并使用跟踪内容将方法调用包装到原始类.
你可以通过类加载器匹配某种命名/包模式的类列表来旋转,然后为每个类似decorateMethodsWithLogging执行以下操作: class Foo {
def bar() {
println "in bar"
}
def baz(String name) {
println "in baz with $name"
}
}
def decorateMethodsWithLogging(clazz) {
def mc = clazz.metaClass
mc.invokeMethod = { String name,args ->
println "before $name,args = $args"
def result = mc.getMetaMethod(name,args).invoke(delegate,args)
println "after $name"
return result
}
}
decorateMethodsWithLogging(Foo.class)
def f = new Foo()
f.bar()
f.baz("qux")
这打印 before bar,args = [] in bar after bar before baz,args = [qux] in baz with qux after baz (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
