tomcat 违背了java 推荐的双亲委派模型了吗?答案是:违背了。 我们前面说过:

双亲委派模型要求除了顶层的启动类加载器之外,其余的类加载器都应当由自己的父类加载器加载。

很显然,tomcat 不是这样实现,tomcat 为了实现隔离性,没有遵守这个约定,每个webappClassLoader加载自己的目录下的class文件,不会传递给父类加载器。

我们扩展出一个问题:如果tomcat 的 Common ClassLoader 想加载 WebApp ClassLoader 中的类,该怎么办?
看了前面的关于破坏双亲委派模型的内容,我们心里有数了,我们可以使用线程上下文类加载器实现,使用线程上下文加载器,可以让父类加载器请求子类加载器去完成类加载的动作。牛逼吧。

双亲委任模型时如何实现的?
非常简单:所有的代码都在java.lang.ClassLoader中的loadClass方法之中,代码如下:
逻辑清晰易懂:先检查是否已经被加载过,若没有加载则调用父加载器的loadClass方法, 如父加载器为空则默认使用启动类加载器作为父加载器。如果父类加载失败,抛出ClassNotFoundException 异常后,再调用自己的findClass方法进行加载。

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

https://www.freesion.com/article/23671037709/

TOMCAT为什么打破双亲委派的类加载模型相关推荐

  1. 自定义类加载器以及打破双亲委派

    0x01 自定义类加载器 自定义类加载器加载一个类需要:继承ClassLoader,重写findClass,如果不想打破双亲委派模型,那么只需要重写findClass:如果想打破双亲委派模型,那么就重 ...

  2. Tomcat打破双亲委派模型

    tomcat的类加载器结构 在Tomcat目录结构中,有三组目录("/common/*","/server/*"和"shared/*")可以 ...

  3. Tomcat打破双亲委派机制

    打破双亲委派 沙箱安全机制示例,尝试打破双亲委派机制,用自定义类加载器加载自己实现的 java.lang.String.class public class MyClassLoaderTest {st ...

  4. 如何打破双亲委派模型?打破双亲委派模型示例?什么是双亲委派模型?

    什么是双亲委派模型? 双亲委派模型:如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把请求委托给父加载器去完成,依次向上,因此,所有的类加载请求最终都应该被传递到顶层的启动类加 ...

  5. JVM17_Tomcat打破双亲委派机制、执行顺序、底层代码原理、Tomcat|JDBC破坏双亲委派机制带来的面试题

    文章目录 ①. Tomcat类加载机制 ②. Tomcat执行顺序 ③. ClassLoader的创建 ④. ClassLoader加载过程 ⑤. Tomcat破坏双亲委派机制带来的面试题 ①. To ...

  6. JVM类加载机制、双亲委派机制、自定义类加载器、打破双亲委派机制

    1.类加载器 站在Java虚拟机的角度看,只有两种不同的类加载器:一种是启动类加载器(Bootstrap ClassLoader),这个类加载器使用C++语言实现(HotSpot虚拟机.JDK8中), ...

  7. 双亲委派模型为什么要打破双亲委派模型

    目录 一:什么是双亲委派模型 二:什么情况下要打破双亲委派模型 三:如何打破 一:什么是双亲委派模型 Java 虚拟机对 class 文件采用的是按需加载的方式(也可以称之为懒加载),也就是说当 需要 ...

  8. 类加载器的双亲委派及打破双亲委派

    一般的场景中使用Java默认的类加载器即可,但有时为了达到某种目的又不得不实现自己的类加载器,例如为了达到类库的互相隔离,例如为了达到热部署重加载功能.这时就需要自己定义类加载器,每个类加载器加载各自 ...

  9. 如何打破双亲委派机制

    双亲委派机制 第一次知道何为打破双亲委派机制是通过阅读周志明的<深入理解Java虚拟机>,我们知道双亲委派机制是指当一个类加载器收到一个类加载请求时,该类加载器首先会把请求委派给父类加载器 ...

最新文章

  1. 服务发现对比:Zookeeper vs. etcd vs. Consul
  2. UA MATH523A 实分析3 积分理论例题 Fubini定理计算重积分的极限
  3. 【杂谈】篇篇精华,有三AI不得不看的技术综述(超过100篇核心干货)
  4. 高斯分布 (Gaussian distribution)
  5. key位置 win10生成的ssh_Git实现ssh免密登录
  6. 简历中能熟练使用计算机怎么写,过了计算机二级,可以在简历里写“熟练掌握Excel”吗?...
  7. * 完成随机点名案例;学生姓名都提前写在文件中;:每次敲回车,随机显示一个学生姓名,每人最多显示一次,所有人都显示完了就结束程序;
  8. M理论能否成为解释一切的“万有理论”?
  9. [BZOJ1834][ZJOI2010]network 网络扩容 最大流+费用流
  10. 简单的datalist分页代码
  11. Redis学习---(10)Redis 集合(Set)
  12. 【NOIP】OpenJudge - 15:银行利息
  13. php列表代码怎么做的,php项目实战:代码讲解之订单列表问题
  14. Vc数据库编程基础1
  15. 启动不起来_汽车没电发动不起来咋办?老司机平时都用这几种方法,简单有效...
  16. Linux操作系统面试题
  17. 彻底关闭Windows更新
  18. 解决跨域(六)--- document.domian
  19. matlab 矩阵与数比较,MATLAB 对矩阵中的数据进行大小比较
  20. Windows下安装与配置Docker

热门文章

  1. Interface Builder 和UIController的联系
  2. java string.indexof(string)_Java StringBuffer indexOf()方法
  3. 输入法按照选字频率排序的C语言程序算法,算法与数据结构之选择排序(C语言)...
  4. java 连续打印_Java实现连续打印ABC
  5. 云计算 - OpenStack
  6. iview 表单 验证_iview必备技能一、表单验证规则
  7. idea中如何reimport_IDEA中导入新项目遇坑
  8. 前后端解析_好程序员Web前端教程分享前后端分离接口
  9. mysql 数据字典详解_InnoDB数据字典详解-系统表
  10. python量化策略代码_手把手教你用三行python 代码做一个动量策略「量化投资系列」...