在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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |