2012-03-02 28 views
1

我有一個框架代表客戶端加載任意類的實例,並希望字段(特別是私有字段)只有在第一次訪問字段時才能初始化/加載懶惰。攔截私人字段訪問做延遲加載

有沒有辦法在返回值之前攔截這些私人字段訪問並將值注入字段(也可能「緩存」它們)?

我猜java.lang.reflect.Proxy/InvocationHandler被排除,因爲它們只能攔截方法調用。

我有一個直覺認爲字節碼操作庫可以處理這個問題。我已經看過ASM,Javassist,BCEL,cglib並且搜索了所有內容,但未能找到有關如何實現此目的的明確說明。

回答

0

這對於使用ASM或類似框架的字節碼工具來說當然是可行的,但是您必須瞭解字節碼內部工作以及一些JVM內部工作。

更簡單的方法是使用AspectJ並在您的對象上應用方面。在這個AOSD'07 paper中有一些與Java對象的透明集羣相似的例子。

+0

感謝您的回答。我害怕aspectj不適合我,因爲我想避免編譯時依賴。 – deephacks 2012-03-03 13:54:32