代码之家  ›  专栏  ›  技术社区  ›  Kyle

在Groovy中,有没有一种方法来修饰每个类以添加跟踪?

  •  5
  • Kyle  · 技术社区  · 14 年前

    如何让我的每个groovy类的每个方法调用在进入方法调用时打印“Entering${methodname}”?

    不必包装我创建的每个新对象 new TracingDecorator(new Object())

    1 回复  |  直到 14 年前
        1
  •  8
  •   Ted Naleid    14 年前

    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