問題: 當我們使用如下語句載入.properties時:
classloader classloader = this.getclass().getclassloader();
properties prop = new properties();
會發現修改了.properties後,即使重新執行,讀入的仍為修改前的引數。此問題的原因在於classloader.getresourceasstream讀入後,會將.properties儲存在快取中,重新執行時會從快取中讀取,而不是再次讀取.properties檔案。
解決:
properties prop = new properties();inputstream is = new fileinputstream(絕對路徑);
prop.load(is);
此時,fileinputstream不會將.properties儲存在快取中,即可以解決此問題。但另外讓人困惑的 乙個問題會產生,即絕對路徑,會導致程式的通用性不好。這個問題是由於classloader.getresourceasstream是直接尋找 classes下的檔案,fileinputstream則需要用完整的絕對路徑。
完美解決:
properties prop = new properties();
string path = thread.currentthread().getcontextclassloader().getresource("").getpath();
inputstream is = new fileinputstream(path + "/vouchermanagement.properties");
此時已無需給出.properties絕對路徑,實現動態載入。
JAVA類動態載入的實現
結束 以上所述,想必大家對jvm類載入的原理有了一定的了解,大致也猜到實現的方法了吧。結合上面說到,要jvm重新載入乙個類,一共有3種辦法 我加了一種 1.重新寫乙個新的路徑,更換包名或類名都是可行的方法。2.自己寫乙個類的尋找機制取代systemclassloader中的,再呼叫definecla...
java動態載入
package com.service import com.xx.domaim public inte ce userserviceps com xx.domain是引用的另乙個工程c的domain 此時如果只是載入了b工程的jar 載入b工程的源 public class classloader...
java動態載入類
new建立物件是靜態載入類,在編譯時刻就需要載入所有的可能用到的類。而通過動態載入類可以解決此問題 class office if excel equals args 0 以上 在編譯時就會報錯,因為找不到word類和excel類以及其各自的 start 方法.若存在乙個word類,我們編譯器還是不...