关于tomcat的classloader的一点想法

关于tomcat的classloader相关的帖子网上非常多,我觉得比较好的有:

https://www.jianshu.com/p/d90e4430b0b9

https://blog.csdn.net/qq_38182963/article/details/78660779

但是看了很多文章都说tomcat违反了双亲委派模型,可以是通过源码以及一些概念包括tomcat的delegate的设置描述并没有觉得tomcat是因为违反了双亲委派模型才实现多个应用的classpath隔离。

delegate为true,表示tomcat将遵循JVM的delegate机制,即一个WebAppClassLoader在加载类文件时,会先递交给SharedClassLoader加载,SharedClassLoader无法加载成功,会继续向自己的父类委托,一直到BootstarpClassLoader,如果都没有加载成功,则最后由WebAppClassLoader自己进行加载。

delegate为false,表示将不遵循这个delegate机制,即WebAppClassLoader在加载类文件时,会优先自己尝试加载,如果加载失败,才会沿着继承链,依次委托父类加载。

个人觉得:
Tomcat可以走双亲委派模式,也可以走违反双亲委派的模式
Tomcat的隔离性在于它的每个应用都有自己的WebappClassLoader以及每个jsp都有自己jasperloader(不同的classloader加载同一个class都是不同的类,实例也不同)。
Tomcat的隔离性不是因为他违反了双亲委派模式,更不是因为他用了上下文模式,上下文模式只是解决了双亲委派模式下上层loader加载下层loader的问题。

原文地址:https://www.cnblogs.com/zxporz/p/10702674.html