回首向來蕭瑟處,歸去,也無風雨也無晴.

           

          打印類加載器

          一段代碼挺有意思:

          public class Quux {

              
          public static void main(String[] args) {
                  ClassLoader cl
          =Quux.class.getClassLoader();
                  System.out.println(
          "Delegation for Quux:");
                  
          while(cl!=null){
                      System.out.println(cl);
                      cl
          =cl.getParent();
                  }
                  System.out.println(
          "{bootstrap loader}");
              }
          }


          得到得結果是:
          Delegation for Quux:
          sun.misc.Launcher$AppClassLoader@131f71a
          sun.misc.Launcher$ExtClassLoader@15601ea
          {bootstrap loader}


          這鍛代碼展現(xiàn)了類加載的3個加載器(ClassLoader):

          AppClassLoader是系統(tǒng)類加載器,(即由getSystemClassLoader()方法可得到的Loader),它主要負責加載應用類。
          ExtClassLoader是擴展類加載器,默認下負責加載${JAVA_HOME}$/lib/ext目錄下的類。
          bootstrapLoader是引導類加載器,主要負責檢查引導路徑及加載核心api包。

          這3個加載器先后為 boot->Ext->App ,boot是Ext的父加載器,Ext是App的父加載器,加載器是成樹狀的,當然也可以自己定義加載器。加載器加載的每一個類的實例都維護個指向裝載器的引用,所以要得到加載器得引用很簡單:getClassLoader()就行了,而getParent()則得到其父類加載器(代碼中表現(xiàn)的很清楚了)。

          類加載器有個委托規(guī)則(基本上就是偷懶規(guī)則):加載器加載類前總是要問下父加載器有沒有這個類(有就不加載了-_-!),而這個過程中的ClassLoader遞歸集就稱為一個DELEGATION.

          加載的過程又有顯示加載,一般用URLClassLoader:
              new URLClassLoader(new URL[]{url})
          這玩意玩熱部署挺有意思的,tom貓里好像就有(沒什么印象,汗)。

          有的人也用Loader來裝載配置文件,我也喜歡這么用,
              getSystemClassLoader().getResourceAsStream(String res);
          這個方法返回個InputStream,用properties提取下就行了,真是居家旅行必備良藥啊。
             
          new Properties().load(is);

          還有隱式加載,既然叫隱式,咱明代碼就干涉不到了,繼承,引用一般都是隱式加載類的。

          對了,java中還有個參數(shù):-verbose,用了它就可以詳細看到加載的過程。

          類加載屬于中級的知識了,應用內容也不是一點兩點,咱又不是牛人,講不太清楚。牛人Halloway寫的component Development for the java Platform挺不錯,建議看看;在IMBDevelopers上還有幾篇很好的文章,有興趣的話就去看看吧。

          posted on 2006-01-21 22:16 VANS 閱讀(508) 評論(0)  編輯  收藏 所屬分類: code


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導航:
           

          導航

          統(tǒng)計

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          搜索

          最新評論

          主站蜘蛛池模板: 景德镇市| 许昌县| 阿巴嘎旗| 云林县| 三江| 大余县| 孟村| 休宁县| 龙里县| 农安县| 安丘市| 宝兴县| 延安市| 木里| 珲春市| 汝阳县| 连州市| 六枝特区| 东港市| 曲阜市| 卢氏县| 南通市| 怀宁县| 黑龙江省| 洮南市| 耿马| 龙里县| 石狮市| 浙江省| 天水市| 常德市| 调兵山市| 根河市| 大方县| 孟津县| 甘肃省| 霍林郭勒市| 京山县| 石河子市| 蓬莱市| 阳新县|