gpt4 book ai didi

groovy - 在 Groovy 中有没有办法装饰每个类以添加跟踪?

转载 作者:行者123 更新时间:2023-12-04 17:58:27 25 4
gpt4 key购买 nike

我将如何在我的每个 groovy 类的每个方法调用中打印“Entering ${methodname}”,因为它进入方法调用?

无需包装我创建的每个新对象 new 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

关于groovy - 在 Groovy 中有没有办法装饰每个类以添加跟踪?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3691933/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com