你必须知道的ClassLoader
为什么必须知道:ClassLoader ClassLoader是类加载的重要类。
分类:主要分为bootstrapClassLoader,ExtClassLoader,AppClassLoader。
是基于C++ 实现,主要加载Javahome/lib,ExtClassLoader主要加载javaHome/lib/ext,AppClassLoader主要加载classpath下面的类。
什么是Classloader :类的初始化装载的一个类,
加载顺序,先让父加载器加载,如果找不到在用子加载器加载。如果父类想访问子类加载器需要Thread.cureentThread.getClassloader.获取子加载类。
自定义ClassLoader,为了保证委托双亲委托的原则,需要覆盖findClass. 为什么要双亲委托呢。一般程序是使用AppClassLoader ,上面还有两个ClassLoader,所以叫双亲。
常用的ClassLoader场景
SPI和Tomcat
SPI 使用ClassLoader的Thread.cureentThread.getClassloader 来在lib里面访问自定义标准类如mysql.driver。
Tomcat 通过自定义类来实现类库复用,程序隔离等。
参考文档
https://blog.csdn.net/xyang81/article/details/7292380
https://blog.csdn.net/briblue/article/details/54973413
https://mp.weixin.qq.com/s/54ZrYCLD6rzk8T52s4wyOQ