tomcat 违背了java 推荐的双亲委派模型了吗?答案是:违背了。 我们前面说过:
双亲委派模型要求除了顶层的启动类加载器之外,其余的类加载器都应当由自己的父类加载器加载。
很显然,tomcat 不是这样实现,tomcat 为了实现隔离性,没有遵守这个约定,每个webappClassLoader加载自己的目录下的class文件,不会传递给父类加载器。
我们扩展出一个问题:如果tomcat 的 Common ClassLoader 想加载 WebApp ClassLoader 中的类,该怎么办?
看了前面的关于破坏双亲委派模型的内容,我们心里有数了,我们可以使用线程上下文类加载器实现,使用线程上下文加载器,可以让父类加载器请求子类加载器去完成类加载的动作。牛逼吧。
双亲委任模型时如何实现的?
非常简单:所有的代码都在java.lang.ClassLoader中的loadClass方法之中,代码如下:
逻辑清晰易懂:先检查是否已经被加载过,若没有加载则调用父加载器的loadClass方法, 如父加载器为空则默认使用启动类加载器作为父加载器。如果父类加载失败,抛出ClassNotFoundException 异常后,再调用自己的findClass方法进行加载。
https://blog.youkuaiyun.com/qq_38182963/article/details/78660779
本文探讨了Tomcat如何违背了Java推荐的双亲委派模型,详细解释了其特殊的类加载机制,并介绍了如何通过线程上下文类加载器解决类加载的问题。
1721

被折叠的 条评论
为什么被折叠?



