【jvm】如何破坏双亲委派机制

news2024/11/18 0:01:02

目录

        • 1.说明
        • 2.重写ClassLoader的loadClass方法
          • 2.1 原理
          • 2.2 实现步骤
          • 2.3 注意事项
        • 3.使用线程上下文类加载器
          • 3.1 原理
          • 3.2 实现步骤
          • 3.3 应用场景
        • 4.利用SPI机制
          • 4.1 原理
          • 4.2 实现步骤
          • 4.3 应用场景
        • 5.Tomcat等容器的自定义类加载器
          • 5.1 原理
          • 5.2 实现方式
          • 5.3 应用场景

1.说明
  • 1.双亲委派模型是Java类加载器的一个重要特性,但在某些特殊情况下,可能需要打破这种机制以满足特定需求。
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
2.重写ClassLoader的loadClass方法
2.1 原理
  • 1.通过继承ClassLoader类并重写其loadClass方法,可以自定义类的加载行为。
  • 2.在重写的方法中,可以控制是否调用父类加载器的loadClass方法,从而打破双亲委派模型。
2.2 实现步骤
  • 1.创建一个继承自ClassLoader的自定义类加载器。
  • 2.在自定义类加载器中重写loadClass方法。
  • 3.在重写的方法中,根据需求决定是否调用父类加载器的loadClass方法。
2.3 注意事项
  • 1.重写loadClass方法时需要谨慎处理类的加载逻辑,以避免出现类加载冲突或类定义错误等问题。
  • 2.如果完全重写loadClass方法而不调用父类加载器的loadClass方法,则需要注意处理类的依赖关系,确保所有依赖的类都能被正确加载。
3.使用线程上下文类加载器
3.1 原理
  • 1.Java中的每个线程都有一个关联的上下文类加载器(Context ClassLoader)。
  • 2.通过设置线程的上下文类加载器,可以实现类的加载,而不受双亲委派模型的限制。
3.2 实现步骤
  • 1.获取当前线程的上下文类加载器。
  • 2.使用setContextClassLoader方法设置新的上下文类加载器。
  • 3.通过新的上下文类加载器加载类。
3.3 应用场景
  • 1.线程上下文类加载器常用于JDBC等需要动态加载类的场景。
  • 2.例如,JDBC驱动通常由应用类加载器加载,而JDBC API则由启动类加载器加载。为了解决这个问题,JDBC使用线程上下文类加载器来加载数据库驱动。
4.利用SPI机制
4.1 原理
  • 1.SPI(Service Provider Interface)是一种服务发现机制。
  • 2.它通过在ClassPath路径下的META-INF/services文件夹查找文件,自动加载文件里所定义的类。
  • 3.通过SPI机制,可以实现父类加载器委托子类加载器加载类的需求,从而打破双亲委派模型。
4.2 实现步骤
  • 1.在META-INF/services目录下创建一个以接口全路径命名的文件。
  • 2.在文件中指定实现类的全路径。
  • 3.使用ServiceLoader类加载并实例化接口的实现类。
4.3 应用场景
  • 1.SPI机制常用于框架扩展和插件化开发。
  • 2.例如,Java的JDBC就使用了SPI机制来加载数据库驱动。
5.Tomcat等容器的自定义类加载器
5.1 原理
  • 1.在Tomcat等容器中,每个Web应用都有自己的类加载器。
  • 2.这些类加载器通常是通过继承ClassLoader类并重写其方法来实现的。
  • 3.通过这种方式,Tomcat等容器可以实现应用之间的类隔离,并打破双亲委派模型。
5.2 实现方式
  • 1.Tomcat等容器会为每个Web应用创建一个独立的类加载器。
  • 2.当需要加载类时,这些类加载器会首先在自己的命名空间中查找。
  • 3.如果找不到,则会委托给父类加载器进行查找。
  • 4.由于每个Web应用都有自己的类加载器,因此即使两个应用中有相同限定名的类,它们也会被视为不同的类。
5.3 应用场景
  • 1.Tomcat等容器的自定义类加载器常用于多Web应用环境下的类隔离和资源共享。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2242476.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

1 图的搜索 奇偶剪枝

图论——图的搜索_Alex_McAvoy的博客-CSDN博客 语雀版本 1 深度优先搜索DFS 1. 从图中某个顶点 v0 出发,首先访问 v0 2. 访问结点 v0 的第一个邻接点,以这个邻接点 vt 作为一个新节点,访问 vt 所有邻接点,直到以 vt 出发的所有节…

【Linux庖丁解牛】—Linux基本指令(下)!

目录 1、grep指令 2、zip/unzip指令 3、sz/rz指令 4、tar指令 ​编辑 5、scp指令 6、bc指令 7、uname –r指令 8、重要的几个热键 9、关机 10、完结撒花 1、grep指令 grep是文本过滤器,其作用是在指定的文件中过滤出包含你指定字符串的内容,…

Oracle19C AWR报告分析之Top 10 Foreground Events by Total Wait Time

Oracle19C AWR报告分析之Top 10 Foreground Events by Total Wait Time 一、分析数据二、详细分析2.1 Top 10 Foreground Events by Total Wait Time各项指标及其解释2.2 分析和总结 一、分析数据 二、详细分析 2.1 Top 10 Foreground Events by Total Wait Time各项指标及其解…

Android Framework AMS(14)ContentProvider分析-1(CP组件应用及开机启动注册流程解读)

该系列文章总纲链接:专题总纲目录 Android Framework 总纲 本章关键点总结 & 说明: 说明:本章节主要解读ContentProvider组件的基本知识。关注思维导图中左上侧部分即可。 有了前面activity组件分析、service组件分析、广播组件分析的基…

计算机视觉 1-8章 (硕士)

文章目录 零、前言1.先行课程:python、深度学习、数字图像处理2.查文献3.环境安装 第一章:概论1.计算机视觉的概念2.机器学习 第二章:图像处理相关基础1.图像的概念2.图像处理3.滤波器4.卷积神经网络CNN5.图像的多层表示:图像金字…

Vue基础(1)_模板语法、数据绑定

模板语法 Vue模板语法有2大类: 1、插值语法; 功能:用于解析标签体内内容。 写法:{{xxx}},xxx是js表达式,且可以直接读取到data中的所有属性。 2、指令语法: 功能:用于解析标签(包括…

《生成式 AI》课程 第3講 CODE TASK 任务2:角色扮演的机器人

课程 《生成式 AI》课程 第3講:訓練不了人工智慧嗎?你可以訓練你自己-CSDN博客 我们希望你设计一个机器人服务,你可以用LM玩角色扮演游戏。 与LM进行多轮对话 提示:告诉聊天机器人扮演任意角色。 后续输入:与聊天机器人交互。 Part 2: Role…

【软件工程】一篇入门UML建模图(类图)

🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀软件开发必练内功_十二月的猫的博客-CSDN博客 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前…

展会邀约|加速科技与您相约IC China 2024!

第二十一届中国国际半导体博览会( IC China 2024)将于 2024 年11月18日—11月20日在北京国家会议中心举行。加速科技将携高性能测试机ST2500EX、ST2500E、eATE及全系测试解决方案亮相E2馆B150展位。博览会期间,将同期举办"半导体产业前沿…

用python中的tkinter包实现进度条

python中的tkinter包是一种常见的设计程序的GUI界面用的包。本文主要介绍这里面的一个组件:进度条(Progressbar)。Tkinter Progressbar里面对进度条组件已经做了一定的介绍,但比较抽象。本文以另一种方式介绍这个组件及其常用用法…

蓝桥杯每日真题 - 第15天

题目:(钟表) 题目描述(13届 C&C B组B题) 解题思路: 理解钟表指针的运动: 秒针每分钟转一圈,即每秒转6度。 分针每小时转一圈,即每分钟转6度。 时针每12小时转一圈…

rust高级特征

文章目录 不安全的rust解引用裸指针裸指针与引用和智能指针的区别裸指针使用解引用运算符 *,这需要一个 unsafe 块调用不安全函数或方法在不安全的代码之上构建一个安全的抽象层 使用 extern 函数调用外部代码rust调用C语言函数rust接口被C语言程序调用 访问或修改可…

ArcGIS Pro属性表乱码与字段名3个汉字解决方案大总结

01 背景 我们之前在使用ArcGIS出现导出Excel中文乱码及shp添加字段3个字被截断的情况,我们有以下应对策略: 推荐阅读:ArcGIS导出Excel中文乱码及shp添加字段3个字被截断? 那如果我们使用ArGIS Pro出现上述问题,该如何…

GOLANG+VUE后台管理系统

1.截图 2.后端工程截图 3.前端工程截图

STM32设计防丢防摔智能行李箱

目录 目录 前言 一、本设计主要实现哪些很“开门”功能? 二、电路设计原理图 1.电路图采用Altium Designer进行设计: 2.实物展示图片 三、程序源代码设计 四、获取资料内容 前言 随着科技的不断发展,嵌入式系统、物联网技术、智能设备…

论文阅读 - Causally Regularized Learning with Agnostic Data Selection

代码链接: GitHub - HMTTT/CRLR: CRLR尝试实现 https://arxiv.org/pdf/1708.06656v2 目录 摘要 INTRODUCTION 2 RELATED WORK 3 CAUSALLY REGULARIZED LOGISTIC REGRESSION 3.1 Problem Formulation 3.2 Confounder Balancing 3.3 Causally Regularized Lo…

探索Python文档自动化的奥秘:`python-docx`库全解析

文章目录 探索Python文档自动化的奥秘:python-docx库全解析1. 背景:为何选择python-docx?2. python-docx是什么?3. 如何安装python-docx?4. 简单库函数使用方法创建文档添加段落添加标题添加表格插入图片 5. 应用场景自…

Vue3 -- element-plus【项目集成1】

本次项目采用的UI组件库为element-plus,请各位看官根据实际情况进行观看。 集成element-plus: 官网直达车:element-plus 官网明确指出如何引入使用。 安装element-plus: 选择一个你喜欢的包管理器: npm install el…

MySQL 中的集群部署方案

文章目录 MySQL 中的集群部署方案MySQL ReplicationMySQL Group ReplicationInnoDB ClusterInnoDB ClusterSetInnoDB ReplicaSetMMMMHAGalera ClusterMySQL ClusterMySQL Fabric 总结参考 MySQL 中的集群部署方案 MySQL Replication MySQL Replication 是官方提供的主从同步方…

【功耗现象】com.gorgeous.lite后台Camera 使用2小时平均电流200mA耗电量400mAh现象

现象 轻颜相机(com.gorgeous.lite)后台Camera 使用2小时平均电流200mA(BugReport提供的电流参考数据),耗电量400mAh 即耗电占比(200mA*2h)/(12.83h*52.68mA )400mAh/623mAh62% CameraOct 10 202321:03:08 - 23:03:372h16m15s859ms to 4h16m44s984msactive duration: 2h 0m 29…