我想拦截對某个類MyClass的所有方法呼叫,以便能够對某些setter呼叫做出反應。
我尝試使用動態代理,但是据我所知,這仅適用於實現某些介面的類.但是MyClass没有這樣的介面。
除了實現包裝器類之外,還有其他方法可以將所有呼叫委派给成員(成員是MyClass的例項或使用AOP进行支援)吗?
- 1月前1 #
- 1月前2 #
如果您準備做一些非常丑陋的事情,請查看:
http://docs.oracle.com/javase/7/docs/technotes/guides/jpda/
基本上,除錯器介面應允许您像除錯器一樣进行附加,因此可以拦截呼叫.請記住,我认為這是一个 really
- 1月前3 #
Java没有用於方法拦截的實際語言功能(不確定是否有任何靜態語言)
我有點像尼克的使用除錯器介面的想法,這只是意思.
我认為您需要的簡短答案是:在没有使用代理或包裝程式實際替換類的情况下,没有办法拦截Java中的方法呼叫。
註意:AOP庫只是使這種情况自動發生。
- 1月前4 #
我為此目的開發了一个小型框架。 您可以在以下網址进行檢查:http://code.google.com/p/java-interceptor/(使用svn进行檢出)。
- 1月前5 #
某些Java专家可能對此並不满意.在完全避免使用原始型別和setter方面取得了一些成功.我的Class看起来像這樣:
class Employee extends SmartPojo { public SmartString name; public SmartInt age; }
您会註意到两件事:1.一切都是公開的. 2.没有構造函式。
神奇之處在於SmartPojo,它会搜尋實現" Smart"介面並對其进行初始化的任何欄位.由於這不是原始的(也不是最终的類),因此我可以在一个地方為模型中任何地方的所有欄位添加set()和get()方法.因此,不再有設置者/获取者的浪费,添加通知(也在單个位置)等非常簡單。
是的,這不再是POJO了,在大多數情况下它也不是Bean,但我發現這些古老的想法對我的限製超過了他们的帮助. yMMV。
相似問題
- 从Java方法返迴多个值:為什麼没有n元組物件?javamethodsreturntype2021-01-12 00:56
- java:如何使用可變引數和反射javareflectionvariadicfunctions2021-01-11 20:57
- java:如何在另一種方法中使用一種方法的變數?javamethodsmultidimensionalarray2021-01-11 05:54
您註意到,不能使用 JDK動態代理(無介面),但是使用Spring和CGLIB(Spring隨附的JAR),您可以執行以下操作: