本篇文章仅作为记录学习之用,不具有参考价值. 如果您想系统学习,请移步最下方参考资料.
今天逛了一下牛客网, 看到有面试问到了双亲委派机制是什么, tomcat有没有打破双亲委派 , 瞬间懵逼, 听都没听过的名字, 听着就稀奇古怪. 然后翻了一下网上的答案,大概了解怎么回事. 特意整理下, 如果学习请参考其他博客
双亲委派名称由来暂时不知道. 它的加载逻辑大概就是 加载类的时候, 先去从父加载器中找. 如果父加载器还有父加载器, 就一直往上找, 一直找到最顶层的那个加载器, 然后往里边加载类,如果此加载器没有这个类, 就让它子类加载, 以此类推. 直到找到需要加载的类为止
小明向老爸要100块钱零花钱, 然后你老爸又向你爷爷要100块, 如果你爷爷是没有父级, 那么他应该直接从腰包里加载100块. 此时, 你爷爷并没有100块, 然后向下 你父亲来加载100块, 如果你父亲也没有100块, 你自己从腰包里掏, 如果你也没有100块, 那就是 ClassNotFound了.
tomcat是打破了双亲委派机制的, 众所周知 tomcat可以部署多个项目, 比如我们在webapps下,放入两个war包, 它们都有一个类,叫做User,并且它们的类全限定名都一样,比如都是com.yyy.User。但是他们的具体实现是不一样的. 原因就是 每个 Web 应用创建一个类加载器实例(WebAppClassLoader),该加载器重写了loadClass方法,优先加载当前应用目录下的类,如果当前找不到了,才一层一层往上找(:
https://zhuanlan.zhihu.com/p/423436230
https://cloud.tencent.com/developer/article/2055271