2017-04-08 67 views
1

我的問題是,是否有可能的屬性,甚至方法注入到一個已經「classloaded」級。我已經注意到,在java中動態添加屬性並不是很簡單,每個人都說你應該使用Map(add property for a object dynamicly)。修改場 - java的

有沒有更好的和更「乾淨」的方式在運行時改變類。我讀了一些關於ASM的知識,但我不知道ASM使用的訪問者模式是否是最佳的工作方式。

如果ASM是處理這個問題的最好的事情,有沒有提供對ASM網站上的一個身邊的任何文件(http://download.forge.objectweb.org/asm/asm4-guide.pdf

+0

這是什麼用法呢? –

+0

我對Spring&Co留下了深刻的印象,我想爲什麼不嘗試編寫相同的代碼,只是爲了瞭解更多關於java.reflection和可能落在這樣一個偉大框架後面的過程。 短:我想通過從ZeroTurnaround(誰使JRebel的)人談話學到新的東西 –

+1

至於我記得添加字段和方法,以現有的類是真的很辛苦,需要像真正用新換的全班解決方法然後更新所有到班級的鏈接。試圖在網上找到這個談話,如果我這樣做會更新。 –

回答

2

一旦類已經被JVM加載,這是不可能的修改它。

最好的辦法是修改類,然後在不同的類加載器加載一個新的副本...。您將最終得到兩個版本的類(使用不同的運行時類型!)。類的第一個版本的任何實例都不會有新的字段,方法等等。

我的建議......不這樣做。想想另一種方法來實現你實際想要在這裏做的事情。或者,如果動態地修改類對於您的應用程序來說很重要,請考慮使用更動態的語言。

+0

謝謝您的回答 –