Re: [問題] ClassLoader

看板java作者 (miss you ~)時間15年前 (2010/10/15 21:54), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串3/4 (看更多)
※ 引述《sbrhsieh (偶爾想擺爛一下)》之銘言: : ※ 引述《meconin (miss you ~)》之銘言: : : 我現在有兩個 class 希望是用自己的 loader load 起來 : : clsA, clsB, : : clsA{ : : test(){ : : System.out.println( : : clsA.class.getClassLoader().getClass().getName()); : : } : : } : : clsB{ : : static test(){ : : clsA a = new clsA(); : : System.out.println(new a.test()); : : } : : } : : 我的 loader 暫時稱呼為 ld : : 我在 main 裡面寫 : : main{ : : Class a = ld.load("clsA", false); : : Class b = ld.load("clsB", false); : : b.test(); : : } : : 會發現 clsA 的 loader 是 sun.misc.Launcher$AppClassLoader : : 不知道有沒有高手對這個機制比較了解,可以說明一下? : 你的 class loader 最重要了,你反而沒有給。 : 看起來你的 class loader 實做的 loadClass 是採一般的 delegation model, : 而你在執行程式時所設定的 classpath 包含了 clsA 所在的路徑,所以當程式 : 使用你設計的 class loader 企圖載入 clsA 時,你的 class loader 會 delegate : 給其 parent loader,而 parent loader(sun.misc.Launcher$AppClassLoader) : 找的到 clsA 的 class file,於是就由 parent loader 載入 clsA。 感謝 抱歉,一下忘了給,想說反正就是 find class protected Class<?> findClass (String name) throws ClassNotFoundException { byte[] clsdef = null; try { clsdef = loadClassData (name); } catch (Exception e) { e.printStackTrace(); } Class<?> cls; cls = defineClass (name,clsdef,0,clsdef.length,null); resolveClass (cls); return cls; } loadClassData 就是去特定路徑把 clsA.class, clsB.class 讀出來成 byte [] 所以說 clsA.class, clsB.class 不能放在 classpath 下囉? 不然就會被 AppClassLoader 看到 ... 我是預期 ld.load 會比 AppClassLoader 早 load 到 clsA.class, clsB.class -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.30.46
文章代碼(AID): #1Ck5qmHJ (java)
討論串 (同標題文章)
本文引述了以下文章的的內容:
以下文章回應了本文
完整討論串 (本文為第 3 之 4 篇):
文章代碼(AID): #1Ck5qmHJ (java)