【发布时间】:2014-05-17 03:10:42
【问题描述】:
假设我们有一个带有一些方法(静态或非静态)的 groovy 类。 我想要做的是在调用这个类的每个方法之前和之后执行一些代码,而不需要完全触及类,也不需要动态操作每个方法内部的代码。
我尝试使用 groovy 元类;获取元类的所有方法,然后用包装方法动态替换每个方法,包含一些代码并在中间调用旧方法。问题是,我不知道每个原始方法的参数,所以我不能用新方法(闭包)替换旧方法,因为我不能动态创建具有不同数量和类型参数的包装闭包,即使你可以,我不知道如何在包装封闭内访问它们。我需要包装闭包具有与旧方法相同的签名,以便在类被透明更改后有人尝试调用旧方法时调用闭包。
在 Javascript 例如我可以使用 args[] 数组来访问函数体中的所有参数,即使我在编写代码时不知道参数名称。
我如何在 groovy 中做到这一点?还是他们可能是实现我尝试做的另一种方式?
【问题讨论】:
标签: reflection groovy closures metaclass