我有一個應用程序需要能夠更新自己的部分(一次一個類),而無需停止和重新啓動。使用JavaCompiler API,直接生成修改的類源代碼,重新編譯,加載和實例化類。我可以在內存中執行此操作(不從磁盤或網絡讀取文件)。動態程序更新,運行時編譯和類加載器
應用程序永遠不會實例化此類的多個對象。這個對象只有兩個或三個引用。當修改後的類被加載並實例化時,所有這些引用將被更改爲新對象。我也可以保證在加載修改後的類時,受影響的類中沒有方法正在另一個線程中運行。
我的問題是這樣的:我的類加載器在加載與之前加載的類具有相同名稱的修改後類時是否有問題?
如果我沒有在類加載器中顯式實現加載類的緩存,是否會避免問題?或者可以委派給父類裝載器仍然會導致問題?
我希望使用我的類加載器的單個實例,但如果有必要,我可以在每次更新一個類時實例化一個新實例。
注:我看着OSGI,它似乎比我需要的多一點。
我有一些非常相似的東西。您必須指定使用JDK才能編譯它,否則您將在JavaCompiler返回null時收到錯誤。 – 2012-02-15 17:42:38