1. 程式人生 > >類載入器的分類與說明

類載入器的分類與說明

一.類載入器的分類:
        1.系統提供的類載入器
                        1.BootStarp(引導類載入器):負責載入java核心類庫,不繼承自ClassLoader載入器;
                            
                        2.Extension(擴充套件類載入器):負責載入java擴充套件庫(例如sun公司專門為連線資料庫設計的JDBC的一組API)

                       3.Application(系統類載入器): 負責載入普通使用者編寫的java應用類    
                                    備註:1.BootStrap載入器是由原生程式碼(C++)編寫而成的,因此不繼承自ClassLoader載入器,其他的類載入都必須繼承自                                                                                                 ClassLoader載入器

                                            2.以上三個載入器是從表面理念上來說是父子關係,但事實並非繼承關係,而是組合的關係
        2.自定義類載入器:必須繼承自ClassLoader載入器
                        例如:Tomcat裡面的web載入器

二.類載入器內部載入機制的分類:
        1.J2SE:採用的是全盤委託機制(也稱雙親委派機制)
                         機制:雙親委派機制
                        結構:.樹狀結構
                        備註:載入一個類的時候:自下而上檢查,在上而下載入
        2.J2EE:   

                    1.在Tomcat中 拋棄了雙親委派機制,而是自定義了web載入器,採用的也是代理模式,在載入一個類的時候:自下而上檢查,自下而上載入
                    2.每個文字應用專案都對應自己獨立的一個web類載入器
                    
三.由於java程式設計的設計思想是面向介面程式設計,
        介面+實現
        1.sun公司都是某個功能的設計者:SPI介面   sun公司自己設計的介面屬於核心庫,必須由BootStrap類載入器載入
        2.其他公司才是這個功能的實現者:SPI實現類   實現公司寫的實現類屬於普通java應用類,必須由Application類載入載入
        備註:由於雙親委派機制一般都設計為同一個類中所關聯的其他類都要讓當前類的載入器載入,所以和上面的這種設計理念又發生了衝突,所以提出了
            執行緒上下文類載入器的概念,果斷拋棄了雙親委派機制,讓其同時載入介面和實現類
            程式碼:Thread.currentThread().setClassLoader(自定義類載入器); 自定義載入器就可以隨意改為自己的載入模式了
四.OSGI(Open Service Gateway Initative)面向java的動態模組的系統