如何替換現有java類的方法(在我的情況下爲GrailsDataBinder)。 我讀的方法調用java類不通過invokeMethod,因此它不起作用,但我認爲會有一些解決方案。Groovy - 如何替換現有Java類的方法
我只是嘗試這樣做
GrailsDataBinder.metaClass.static.createBinder = {Object target, String objectName ->
throw new RuntimeException()
}
這
GrailsDataBinder.class.metaClass.static.createBinder = {Object target, String
objectName -> throw new RuntimeException()
}
但是,這似乎並沒有已經取代了方法,因爲不被調用我的關閉,而是原始的方法執行。
更新
我發現,如果我把從測試類本身的createBinder正在執行關閉 - 所以它的工作原理,當它被調用的方法替換
void testDataBinder() {
GrailsDataBinder.createBinder(null, null)
}
然而從DataBindingUtils,它始終執行原始方法(DataBindingUtils也是一個Java類)
以下是調用方法的DataBindingUtils中的代碼。
binder = GrailsDataBinder.createBinder(object, object.getClass().getName());
注意:前面提到了一些類似的問題,但他們都沒有爲我工作。
從Groovy調用DataBindingUtils的調用?需要Groovy運行時才能獲取元類更改。如果您將Groovy集成到Java中,並且調用來自Java,那麼它將不會看到已修補的更改。 – 2012-02-09 17:43:07
是的,對DataBindingUtils的調用是通過BindDynamicMethod進行的,它從一個groovy類中調用。我也試着直接從Grails單元測試用例中調用DataBindingUtils。 – 2012-02-10 04:04:58