简介
双亲委派模型要求除了顶层的启动类加载器之外,其他的类加载器都要有父类加载器
[类加载器关系图]
工作流程
首先,如果一个类收到了类加载的请求,并不会马上进行类加载,而是会把这个请求委托给父类,递归调用这一过程,直到启动类加载器,如果父类加载器可以完成这一过程,则成功返回,否则,子类加载器会尝试进行记载。
优势
- 这一递归调用,使得类随着类加载器具有了优先级关系,而通过这种关系,可以避免一个类被重复加载;
- 防止核心API库被纂改,假设网络中有一个java.lang.Integer,在传递到启动类加载器的时候,发现这个类已经被加载,也就不会重复加载通过网络传递过来的类了;
- 如果我们自己随意编写了不存在的java.lang.xxx的文件,但是当其加载到启动类加载器的时候,会发现并没有这个类,那么也就不会被加载了。
破坏双亲委派模型
Note(思考):这样一个单向的过程,会使得父类无法识别子类加载的资源?
后果:
解决方法:引入了线程上下文类加载器
\