我试图拦截在Java环境中运行的Groovy脚本内的所有方法调用。拦截Groovy中所有元类的所有方法调用
特别是我想检查所有方法调用的返回类型,如果它是X
我想用Y
替换它。
我知道你可以在MetaClass上使用invokeMethod
进行截取,但我只能对我编译的脚本类做到这一点。如果脚本依次调用类A
上的方法,那么它将创建一个新的MetaClass[A]
,如果没有手动从注册表中手动获取该MetaClass并使用元方法覆盖MetaClass,则无法拦截。
我曾尝试使用GroovySystem.getMetaClassRegistry()
为创建MetaClasses时添加侦听器,以在其中添加元方法,但它似乎从不触发。
我希望这是自动的,而不是事先必须添加注释到我应该转换的方法,或知道哪些类的方法我想转换。返回X
的所有方法应返回Y
。
我可以全局拦截所有方法调用吗?
我可以拦截MetaClass创建吗?
我可以添加自动AST转换吗?