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
架構設計@工程設計@服務穩定性之路