2010-01-15 33 views
5

我正在使用自定義ClassLoader在運行時生成一些(代理)類的Java框架。我希望得到任何這樣的類,即自定義ClassLoader從loadClass(..)返回與此類對應的原始字節數組。這可能嗎?我知道,如果一個類作爲資源存在,那麼你可以使用輸入流以二進制格式加載該類,但如果該類是在運行時生成的,該怎麼辦?獲取在運行時生成的類的字節

+0

你沒有權限訪問自定義類加載器的源代碼嗎? – stacker 2010-01-15 20:29:25

回答

2

註冊一個ClassFileTransformer。記錄您需要的數據,而不是修改字節。

+1

是的,我們實際上幾個星期前就這樣做了。有用。 – user66237 2010-05-25 06:10:13

3

如果用自己的替換自定義ClassLoader,則可以添加一些機制來保存原始字節。

0

ClassLoader中的類由defineClass()方法創建。如果你已經有了一個自定義類加載器,你可以簡單地覆蓋所有的defineClass()方法。對於該方法,您傳遞一個包含類的字節的byte []。保存這些內容,然後您可以稍後訪問它們,但是您需要爲您的應用程序進行訪

有關更多信息,請參見[defineClass()Java Documentation] [1]。

[1]:http://java.sun.com/javase/6/docs/api/java/lang/ClassLoader.html#defineClass(java.lang.String,字節[],INT,INT)

+0

所有的defineClass方法都是final的。 – 2010-05-21 05:56:45

相關問題