首页 > 其他分享 >类加载机制-打破双亲委派机制

类加载机制-打破双亲委派机制

时间:2023-04-02 18:56:34浏览次数:46  
标签:委派 打破 双亲 机制 父类 加载

 

1. 什么是双亲委派机制

双亲委派机制是Java类加载器的一种工作机制,它的主要思想是:如果一个类加载器收到了类加载请求,它首先不会自己去尝试加载这个类,而是把这个请求委托给父类加载器去完成。如果父类加载器还存在父类加载器,则进一步向上委托,依次递归,直到委托到最顶层的启动类加载器为止。如果父类加载器可以完成类加载任务,就成功返回;只有当父类加载器无法完成此加载任务时,子加载器才会尝试自己去加载。

 

2. 为什么要打破 双亲委派机制

打破双亲委派机制的目的是为了类加载隔离。因为在某些情况下父类加载器需要委托子类加载器去加载class文件。受到加载范围的限制,父类加载器无法加载到需要的文件,以Driver接口为例,由于Driver接口定义在jdk当中的,而其实现由各个数据库的服务商来提供,比如mysql。如果使用双亲委派机制,则由于父类无法找到mysql驱动程序,就会抛出ClassNotFoundException异常。

 

3. 打破 双亲委派机制的实际应用有哪些

打破双亲委派机制的应用场景有很多,

比如Tomcat自定义的类加载器WebAppClassLoader打破了双亲委托机制,它首先自己尝试去加载某个类,如果找不到再代理给父类加载器,其目的是优先加载Web应用自己定义的类。具体实现就是重写ClassLoader的两个方法:findClass和loadClass

除此之外,还有JDBC、JNDI等场景也需要打破双亲委派机制。

除此之外,还有Java中的SPI机制,它可以打破双亲委派机制。SPI的全名为Service Provider Interface,主要是应用于厂商自定义组件或插件中,在java.util.ServiceLoader的文档里有比较详细的介绍

 

 

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

 

破坏双亲委派有两种方式:

一种是通过重写 loadClass 方法来实现,

另一种是通过创建自定义的 ClassLoader 来实现。

但是,破坏双亲委派机制可能会导致类的重复加载,从而导致类的冲突和错误。

因此,我们应该尽量避免破坏双亲委派机制。

 

标签:委派,打破,双亲,机制,父类,加载
From: https://www.cnblogs.com/shoshana-kong/p/17281018.html

相关文章

  • Java SPI机制简介
    在JDBC4.0版本之前,使用DriverManager获取Connection对象之前都需要通过代码显式地加载驱动实现类,例如:JDBC4.0之后的版本对此做了改进,我们不再需要显式地加载驱动实现类。这得益于Java中的SPI机制,本节我们就来简单地了解SPI机制。SPI(ServiceProviderInterface)是JDK内置的一......
  • JVM虚拟机-运行机制
    在JAVA中,代码运行是怎么实现的?首先来介绍一下JAVA中的:JAVA三大变量:局部变量(放在栈里)实例变量(放在堆里),实例变量是对象级别的(引用.)当对象中全是重复相同的实例变量,可以换成类级别的静态变量来减少占用内存......
  • 41、K8S-网络机制之Flannel
    1、网络基础1.1、Pod接入网络的具体实现1.1.1、虚拟网桥虚拟网桥:brdige,用纯软件的方式实现一个虚拟网络,用一个虚拟网卡接入到我们虚拟网桥上去。这样就能保证每一个容器和每一个pod都能有一个专用的网络接口,从而实现每一主机组件有网络接口。每一对网卡一半留在pod之......
  • Menu5.2运行机制分析总结
    同步机制分析示例代码对于任务管理采用了单向链表的管理方式,包含了创建、删除、添加、删除、搜索节点以及获取链表头和下一个节点的功能(在Menu5.2中,仅支持默认的)。这些操作涉及多线程并发操作,所以采用了互斥量(mutex)进行同步。当一个线程需要对链接表进行修改操作时,需要先对互斥量......
  • maven打包后加载外部配置文件
    pom.xml文件配置在bulid中指定resources路径并指定不加载的配置文件<resources> <resource> <directory>src/main/resources</directory> <excludes> <!--<exclude>*.xml</exclude> <exclude>*.ini</exclude&g......
  • spring的bean的加载方式
    1、配置文件+<bean/>标签配置文件<beanid="dataSource"class="com.alibaba.druid.pool.DruidDataSource"/>使用publicclassApp1{publicstaticvoidmain(String[]args){ApplicationContextcontext=newClassPathXmlAppl......
  • 40、K8S-安全机制-准入机制之LimitRanger、ResourceQuota、PodSecurityPolicy(PSP)
    1、基础知识1.1、准入机制1.1.1、简介所谓的"准入机制",指的是经过了用户认证、角色授权之后,当进行一些写操作的时候,需要遵循的一些原则性要求。准入机制有一大堆的"准入控制器"组成,这些准入控制器编译进kube-apiserver二进制文件,由集群管理员进行配置。这些控制器中,最......
  • 阶段小结:批量删除的时候使用 this.id的详解、jquery里面的$(this)和this的区别、面试
    this.id指的是当前对象的id比如我点击了button那么此button按钮的id就可以用this.id文章目录this.id指的是当前对象的id比如我点击了button那么此button按钮的id就可以用this.id我们先看项目里面方式1:利用样式,可以隐藏,但是不推荐方式二主角this.id方式:给点击删除的时候......
  • 项目一众筹网05_03_树的节点的增删改查、radio、代码里面实现模拟用户点击重置、每次
    系列文章目录文章目录系列文章目录18-添加子节点-目标和思路19-添加子节点-前端:打开模态框20-添加子节点-前端:发送Ajax请求==代码里面实现模拟用户点击重置==21-添加子节点-后端==bug发现异步的问题:每次加载数据的时候都要考虑一下异步的问题==22-更新节点-目标和思路23-更新节点......
  • 渡一教育_每日一练:对象的加载、对象的创建相关知识面试题
    系列文章目录文章目录系列文章目录题目一:对象的加载、对象的创建相关知识面试题题目答案和解析题目一:对象的加载、对象的创建相关知识面试题题目答案和解析用内存图来做就很简单所以我们从上图可以看出,跟类加载机制有关系传参传参完毕之后,就开始执行那个方法了=最终的答案是D......