打破类加载器的双亲委派机制
双亲委派机制简述
就是自己先不处理,让父加载器处理。这里不是用的继承,每个classLoad里面有一个parent的实例
父辈们都处理不了 自己动手处理。
处理范围
每个加载器处理的范围不同
自定义类加载器-就是看你的findClass和loadClass怎么写了
系统类加载器-classPath
extClassLoader- jre/lib/ext下的jar包
BootstrapClassLoader jvm的核心类库 rt 等
为什么要用双亲委派
主要处于安全性,防止核心类库的类被改写。你要是随便写一些基础String Object 那jvm就乱套了
tomcat是如何打破的
自定义类加载器重写了loadClass和findClass
findClass流程
1.先去web应用目录下面查询类
2.交给父加载器(系统类加载器)去查找
3.如果还没找到 throw new ClassNotFoundException
loadClass流程
1.查询本地缓存中有没有load过(有就返回,没有往下流转,下面都一样)
2.使用系统类加载器查看是否load过
3.使用ext类加载器加载(防止覆盖核心类库的类)
4.使用自定义类加载器加载
4.使用系统类加载器加载 Class.forName()默认使用的是系统类加载器
tomcat的类加载器结构