我試圖攔截在Java環境中運行的Groovy腳本內的所有方法調用。攔截Groovy中所有元類的所有方法調用
特別是我想檢查所有方法調用的返回類型,如果它是X
我想用Y
替換它。
我知道你可以在MetaClass上使用invokeMethod
進行截取,但我只能對我編譯的腳本類做到這一點。如果腳本依次調用類A
上的方法,那麼它將創建一個新的MetaClass[A]
,如果沒有手動從註冊表中手動獲取該MetaClass並使用元方法覆蓋MetaClass,則無法攔截。
我曾嘗試使用GroovySystem.getMetaClassRegistry()
爲創建MetaClasses時添加偵聽器,以在其中添加元方法,但它似乎從不觸發。
我希望這是自動的,而不是事先必須添加註釋到我應該轉換的方法,或知道哪些類的方法我想轉換。返回X
的所有方法應返回Y
。
我可以全局攔截所有方法調用嗎?
我可以攔截MetaClass創建嗎?
我可以添加自動AST轉換嗎?