当前位置: 首页 > news >正文

【什么是双亲委派?】

双亲委派是 Java 中的一种类加载机制

双亲委派模型要求除了顶层的启动类加载器外,其余的类加载器都应当有自己的父类加载器。当一个类加载器收到了类加载的请求时,它首先不会自己去尝试加载这个类,而是把请求委托给父类加载器去完成,依次向上,直到父类加载器无法完成这个加载请求时,子类加载器才会尝试自己去加载。

工作原理

  • 类加载请求传递:当应用程序需要加载一个类时,比如应用自定义的类加载器收到加载请求,它会先将请求传递给它的父类加载器。父类加载器又会继续向上传递,直到到达启动类加载器。
  • 类加载尝试:启动类加载器首先尝试加载类,如果它能够找到并加载这个类,那么就完成了类加载过程。如果启动类加载器无法加载,比如它只负责加载 Java 核心类库,对于应用程序自定义的类无法加载,那么就会将加载任务向下传递给子类加载器。子类加载器接收到父类加载器传递下来的无法加载的任务后,才会尝试自己去加载类。它会在自己负责的类路径中查找并加载该类,如果找到了就加载成功,否则继续向下传递给更下一级的子类加载器,直到类被成功加载或者所有类加载器都尝试过但仍无法加载抛出异常。

作用

  • 避免类的重复加载:比如对于 Java 核心类库中的类,无论在应用程序的多少个地方用到,都只会被启动类加载器加载一次,保证了类在整个 Java 虚拟机中的唯一性。
  • 保证 Java 核心类库的安全性:由于双亲委派机制,使得自定义的类无法替代 Java 核心类库中的类。例如,恶意代码想要自定义一个java.lang.String类来替换系统的String类是不可能的,因为系统的String类会由启动类加载器加载,而自定义的String类无论如何都不会被加载到系统中,从而保证了 Java 核心类库的安全性和稳定性。

打比方

  • 在一家公司里,有普通员工、部门经理、总经理等不同层级。当普通员工需要审批一份文件时,他不会自己直接决定是否通过,而是先把文件交给部门经理。
  • 部门经理收到文件后,也不会马上处理,而是再上交给总经理。总经理是公司最高决策层,就像启动类加载器一样。
  • 总经理先查看这份文件,如果是他职责范围内能处理的,比如涉及公司整体战略的文件,他就直接审批了。如果是一些关于具体部门业务的文件,总经理发现自己处理不了,就会把文件再返回给部门经理。
  • 部门经理接到总经理返回的文件后,才会根据部门的情况来审批。如果部门经理也处理不了,比如涉及到一些特殊的技术细节,才会把文件交给相关的普通员工,让他们根据专业知识来处理。普通员工处理完后,整个审批流程才结束。就像类加载器一样,普通员工、部门经理、总经理各自在自己的职责范围内处理文件,保证文件审批的有序和正确。

相关文章:

  • MySQL数据库(3)—— 表操作
  • DeepSeek与ChatGPT:AI语言模型的全面对决与开发者洞察
  • uniapp h5端和app端 使用 turn.js
  • 基于大语言模型的推荐系统(1)
  • 数据库索引:优点、缺点及常见类型
  • 鸿蒙-自定义布局-实现一个可限制行数的-Flex
  • MySQL优化
  • Pandas库:(二)数组对象的索引
  • Python 高级特性-生成器
  • 计算机组成原理——输入/输出系统(十七)
  • 【个人开源】——从零开始在高通手机上部署sd(二)
  • 边缘安全加速(Edge Security Acceleration)
  • Redis 的线程安全问题解析:为什么 Redis 是线程安全的?
  • Unity游戏制作中的C#基础(3)加减乘除算术操作符,比较运算符,逻辑与,或运算符
  • 【opencv】图像基本操作
  • 机器学习 - 参数平均感知器
  • STM32MP157A单片机移植Linux驱动深入版
  • 视频mp4垂直拼接 水平拼接
  • 高级系统架构师--第七章:安全架构设计理论与实践
  • Nginx Embedded Variables 嵌入式变量解析(4)
  • 哪种“网红减肥法”比较靠谱?医学专家和运动专家共同解答
  • 加强战略矿产出口全链条管控将重点开展哪些工作?商务部答问
  • 横跨万里穿越百年,《受到召唤·敦煌》中张艺兴一人分饰两角
  • 大英博物馆展歌川广重:他是梵高最钟爱的浮世绘名家
  • 国务院关税税则委员会关于调整对原产于美国的进口商品加征关税措施的公告
  • 中保协发布《保险机构适老服务规范》,全面规范保险机构面向老年人提供服务的统一标准