双亲委派模型的工作流程是:
双亲委派模型要求除了顶层的启动类加载器以外,其他的类加载器都有自己的父类加载器,使用组合关系来复用父类加载器。如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把请求委托给父加载器去完成,每一层都是如此。因此所有的加载最终都会到达顶层的启动类加载器。只有当父类加载器反馈不能加载(ClassNotFoundException),即父加载器在它的搜索范围中没有找到所需要的类,才会将加载的任务交给子类加载器。
双亲委派机制:
1、当AppClassLoader加载一个class时,它首先不会自己去尝试加载这个类,而是把类加载请求委派给父类加载器ExtClassLoader去完成。
2、当ExtClassLoader加载一个class时,它首先也不会自己去尝试加载这个类,而是把类加载请求委派给BootStrapClassLoader去完成。
3、如果BootStrapClassLoader加载失败(例如在$JAVA_HOME/jre/lib里未查找到该class),会使用ExtClassLoader来尝试加载;
4、若ExtClassLoader也加载失败,则会使用AppClassLoader来加载,如果AppClassLoader也加载失败,则会报出异常ClassNotFoundException。
注意:这里父类加载器并不是通过继承关系来实现的,而是采用组合实现的。