加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

在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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读