小白秒懂什么是双亲委派模型
在说双亲委派模型前,我们需要先了解类加载器:
类加载器:JVM只会加载二进制文件,类加载器的作用就是将字节码文件加载至JVM中。
类加载器有四种:
- BootStrap ClassLoader:启动类加载器,C++语言编写
JAVA_HOME/jre/lib
目录下。 - ExtClassLoader:扩展类加载器,
JAVA_HOME/jre/lib/ext
目录下。 - AppClassLoader:应用类加载器,加载我们自己写的Java类。
- CustomizeClassLoader:自定义加载器。
双亲委派机制:在尝试加载某一个类的时候,类加载器之间会尝试让自己的上级加载器进行加载,如果上级加载器还有上级,则继续委托上级尝试加载。如果上级加载器无法加载这个类,则让它的下级尝试加载。
那双亲委派机制的作用是什么那?
- 通过这种机制,可以确保一个类不被重复加载,当父类加载器已经加载了这个类,则无需再次重复加载。
- 防止类库API被修改。
最重要的就是防止类库API被修改,看下面实例代码:
public class String {
public static void main(String[] args){
//执行就会报错,因为双亲委派机制会让这个类在BootStrap ClassLoader启动类加载器加载
//在尝试加载时,发现jre下有相同名字的类文件,做到了防止类库API被修改的中作用
}
}
但其实,双亲委派机制是可以被打破的。
打破方法就是:去自定义一个类加载器,并继承ClassLoader
类,重写其中的loadClass()
方法。Tomcat就是利用这种方式,做到了打破双亲委派机制。