2016-02-29 74 views
3

編輯:開始作爲一個低優先級的問題,使我的工作更輕鬆已成爲一個非常有趣的Java巫術練習。感謝您的意見,每個人!如何掛鉤到自動生成的Java方法?

我正在使用自動生成的Java代碼(特別是由AnyLogic生成的代碼),該代碼生成一個名爲onChange()的方法。我想在調用onChange()時調用我自己的方法。有什麼辦法通過反射或其他標準的Java機制「鉤入」onChange()

+2

您是否嘗試過使用AOP(AspectJ或Spring AOP)。你可能會有一個方面,建議在給定的切點之前或之後調用給定的方法。你可以[在這裏找到更多](http://docs.spring.io/spring/docs/current/spring-framework-reference/html/aop.html) – Prashant

+2

如果onChange沒有鉤子,可能會有不同通過擴展或配置更改來完成覆蓋的方式。它總是最好使用框架推薦的方式。 – Bob

+1

AOP也是我的第一個想法,但在這個框架中它相當困難:如果記憶是服務的,那麼它就是我們當地大學裏某個人的項目的一部分,以便將它整合起來。不幸的是我不能覆蓋'onChange()'或者我自己編寫的自動編譯器。我希望未來的軟件包維護人員能夠解決這個問題 - 我向他們介紹過這個問題 - 但我想我需要在此期間解決問題。 –

回答

1

我可以建議的一個解決方案是使用Proxy對象。 Here是一個教程,可能對你有一些幫助。

+0

自動生成的代碼創建一個Java類而不是一個接口。代理似乎基於界面:我在這種情況下如何使用代理? (這可能是我錯誤地解釋了代理如何工作。) –

+1

不,它不允許我們使用類。我現在能想到的唯一解決方案就是使用像[CGLib](https://github.com/cglib)這樣的外部庫。關注[this](https:// dzone。com/articles/cglib-missing-manual)教程。它的工作方式與Proxy相同,但是通過創建Super具體類的子類。它也使用與InvocationHandler相同的API。 – Prashant

+0

@DylanKnowles雖然是通過接口調用的類嗎?方法名('onChange()')確實表明它是。在這種情況下,您可以使用代理。 – biziclop