【发布时间】:2018-06-08 00:43:40
【问题描述】:
我正在尝试拦截在 Java 环境中运行的 Groovy 脚本中的所有方法调用。
特别想检查所有方法调用的返回类型,如果是X我想用Y替换。
我知道您可以在 MetaClass 上使用 invokeMethod 进行拦截,但我只能对我编译的脚本类执行此操作。如果脚本依次调用A 类上的方法,那么它将创建一个新的MetaClass[A],如果不早先从注册表中手动获取该 MetaClass 并使用元方法覆盖它,我将无法拦截它。
我曾尝试使用GroovySystem.getMetaClassRegistry() 在创建元类时添加侦听器,在其中添加元方法,但它似乎永远不会触发。
我希望这是自动的,并且不必事先为我应该转换的方法添加注释,或者知道我想要转换哪些类的方法。所有返回X 的方法都应该返回Y。
我可以全局拦截所有方法调用吗?
我可以拦截 MetaClass 的创建吗?
我可以添加自动 AST 转换吗?
【问题讨论】: