我試過這個,但是打電話時得到一個ClassNotFoundException:是否可以定義一個Java ClassLoader,它將完全不同的類返回給所請求的類?
Class.forName("com.AClass", false, mySpecialLoader)
我試過這個,但是打電話時得到一個ClassNotFoundException:是否可以定義一個Java ClassLoader,它將完全不同的類返回給所請求的類?
Class.forName("com.AClass", false, mySpecialLoader)
類加載器將不得不調用defineClass來獲取類。據的JavaDoc爲的defineClass:
如果名稱不爲空,它必須等於 由字節數組指定的類 的二進制名稱。
如果名稱爲空,它將從字節碼中得到它。所以你可以返回任何你想要的類,只要它叫做com.AClass。換句話說,你可以有多個版本的com.aclass。你甚至可以使用類似JavaAssist的東西來即時創建一個類。
但是這並沒有解釋ClassNotFoundException - 它聽起來像你的類加載器沒有返回任何東西。
不可能返回一個與請求不同的類。但是,可以使用像ASM這樣的字節碼操作工具來自動將要返回的類重命名爲所請求的類。
你能再詳細一點嗎? – Thilo 2008-09-24 04:17:40