Java classLoader源碼分析(上)

類加載類圖.png

Launcher類中的屬性.jpg

AppClassLoader說明.jpg

ExtClassLoader說明.jpg

ext包路徑掃描實現.jpg

加載後置處理.jpg

Launcher類的構造函數

public Launcher() {
        Launcher.ExtClassLoader var1;
        try {
            //1.先通過內部類獲取ExtClassLoader
            var1 = Launcher.ExtClassLoader.getExtClassLoader();
        } catch (IOException var10) {
            throw new InternalError("Could not create extension class loader");
        }

        try {
             //2.再通過內部類獲取AppClassLoader然後初始化classLoader對象
            this.loader = Launcher.AppClassLoader.getAppClassLoader(var1);
        } catch (IOException var9) {
            throw new InternalError("Could not create application class loader");
        }
         //將當前線程的上下文類加載器設置爲    AppClassLoader
        Thread.currentThread().setContextClassLoader(this.loader);
        String var2 = System.getProperty("java.security.manager");
        //下面的代碼就是通過AppClassLoader來加載安全管理器
        if (var2 != null) {
            SecurityManager var3 = null;
            if (!"".equals(var2) && !"default".equals(var2)) {
                try {
                    var3 = (SecurityManager)this.loader.loadClass(var2).newInstance();
                } catch (IllegalAccessException var5) {
                } catch (InstantiationException var6) {
                } catch (ClassNotFoundException var7) {
                } catch (ClassCastException var8) {
                }
            } else {
                var3 = new SecurityManager();
            }
        
            if (var3 == null) {
                throw new InternalError("Could not create SecurityManager: "   var2);
            }
           //設置安全管理器,這裏的安全管理器在需要加載類的時候要用到,需要對加載的類文件進行安全檢查
            System.setSecurityManager(var3);
        }

    }

參考:https://www.cnblogs.com/yiwangzhibujian/p/6207212.html

架構設計@工程設計@服務穩定性之路

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章