【问题标题】:How to add pre and post code to a method with Groovy meta programming?如何使用 Groovy 元编程将前后代码添加到方法中?
【发布时间】:2013-02-02 21:10:51
【问题描述】:

问题

有一个类MyClass 和一个方法myMethod()。如何添加一些代码,例如println "hello",每次调用myMethod() 之前都会执行?

方法替换示例

我知道可以像这样替换整个方法。

MyClass.metaClass.myMethod = { -> println "myMethod() has been replaced..." }

但是,我不想替换整个方法。我只是想在方法之前和之后添加一些代码。

【问题讨论】:

    标签: groovy metaprogramming


    【解决方案1】:

    你可以做这样的事情:

    class MyClass {
      String name
    
      String expand() {
        "expanded $name"
      }
    }
    
    // Cache the old expand method
    def oldExpand = MyClass.metaClass.getMetaMethod( 'expand', null )
    
    // Create a new one
    MyClass.metaClass.expand = { -> 
      // Do something
      println "Pre stuff"
      try {
        // then invoke and return the original method
        oldExpand.invoke( delegate )
      }
      finally {
        // finally doing something else
        println "Post stuff"
      }
    }
    
    def a = new MyClass( name:'tim' )
    
    println "received: " + a.expand()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-30
      • 1970-01-01
      • 2015-05-26
      • 2013-02-26
      • 2018-12-04
      • 2017-03-19
      • 2011-08-19
      • 2012-02-26
      相关资源
      最近更新 更多