你必須知道的ClassLoaderjava
爲何必須知道:ClassLoader ClassLoader是類加載的重要類。mysql
分類:主要分爲bootstrapClassLoader,ExtClassLoader,AppClassLoader。
是基於C++ 實現,主要加載Javahome/lib,ExtClassLoader主要加載javaHome/lib/ext,AppClassLoader主要加載classpath下面的類。sql
什麼是Classloader :類的初始化裝載的一個類,bootstrap
加載順序,先讓父加載器加載,若是找不到在用子加載器加載。若是父類想訪問子類加載器須要Thread.cureentThread.getClassloader.獲取子加載類。spa
自定義ClassLoader,爲了保證委託雙親委託的原則,須要覆蓋findClass. 爲何要雙親委託呢。通常程序是使用AppClassLoader ,上面還有兩個ClassLoader,因此叫雙親。.net
經常使用的ClassLoader場景
SPI和Tomcat
SPI 使用ClassLoader的Thread.cureentThread.getClassloader 來在lib裏面訪問自定義標準類如mysql.driver。
Tomcat 經過自定義類來實現類庫複用,程序隔離等。blog
參考文檔ssl
https://blog.csdn.net/xyang81/article/details/7292380文檔
https://blog.csdn.net/briblue/article/details/54973413get
https://mp.weixin.qq.com/s/54ZrYCLD6rzk8T52s4wyOQ