关于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的问题。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架