首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【JVM】浅谈双亲委派破坏双亲委派

前段时间,笔者同事提出了一个关于类加载器破坏双亲委派的问题,以我们常见到的数据库驱动Driver为例,为什么要实现破坏双亲委派,下面一起来重温一下。...二、双亲委派 想要知道为什么要破坏双亲委派,就要先从什么是双亲委派说起,在此之前,我们先要了解一些概念: 对于任意一个类,都需要由加载它的类加载器和这个类本身来一同确立其在Java虚拟机中的唯一性。...3.1、为什么需要破坏双亲委派?...,这里仅仅是举了破坏双亲委派的其中一个情况。...3.2、破坏双亲委派的实现 我们结合Driver来看一下在spi(Service Provider Inteface)中如何实现破坏双亲委派

1.4K20
您找到你想要的搜索结果了吗?
是的
没有找到

【jvm】通过JDBC为例谈谈双亲委派模型破坏

我们都知道类加载的双亲委派模型 ?...双亲委派模型并不是一个强制约束模型,而是java设计者推荐给开发者的类加载实现方式;但是也会有例外; 今天我们主要来讲一讲 类似于SPI这种设计导致的双亲委派模型被“破坏”的情况; JDBC 不破坏双亲委派模型的情况...这个时候,我们通过DriverManager去获取connection的时候只要遍历当前所有Driver实现,然后选择一个建立连接就可以了 破坏双亲委派模型的情况 在JDBC4.0以后,开始支持使用spi...这就是双亲委派模型的局限性了,父级加载器无法加载子级类加载器路径中的类。...Thread.currentThread().getContextClassLoader(); 这个值如果没有特定设置,一般默认使用的是应用程序类加载器; 总结 为了实现SPI这种模式,实现可插拔 做出了不符合双亲委派原则行为

1.1K50

类加载器与双亲委派模型1 类加载器2 双亲委派模型

2.2 双亲委派模型过程 某个特定的类加载器在接到加载类的请求时,首先将加载任务委托给父类加载器,依次递归,如果父类加载器可以完成类加载任务,就成功返回;只有父类加载器无法完成此加载任务时,才自己去加载...使用双亲委派模型的好处在于Java类随着它的类加载器一起具备了一种带有优先级的层次关系 例如类java.lang.Object,它存在于rt.jar中,无论哪一个类加载器要加载这个类,最终都是委派给处于模型最顶端的...相反,如果没有双亲委派模型而是由各个类加载器自行加载的话,如果用户编写了一个java.lang.Object的同名类并放在ClassPath中,那系统中将会出现多个不同的Object类,程序将混乱。...(resolve) { resolveClass(c); } return c; } } 注意,双亲委派模型是...大多数的类加载器都遵循这个模型,但是JDK中也有较大规模破坏双亲模型的情况,例如线程上下文类加载器(Thread Context ClassLoader)的出现,具体分析可以参见周志明著《深入理解Java

59220

类加载过程,双亲委派模型

什么是双亲委派模型?...理解双亲委派模型 感觉这个字面意思好难理解, 个人理解:有一件事我不敢让父亲去干,但是我父亲默认也不干,于是让父亲的父亲去干,父亲的父亲也不干(也就是你爷爷),你爷爷也不干,让你爷爷的父亲去干于是你爷爷的父亲也没办法推辞的上面没人了...1)如上图,其中每个类加载气都有自己对应加载的目标,比如说我们的Object,它是存放在rt.jar之中的,无论哪个类加载器要加载这一个类,最终都会委派到最顶端的启动类加载器,因此Object类在程序的各种类加载器环境中都是同一个类...这也就体现了双亲委派要解决的问题之一,就是防止重复加载导致冲突。导致程序一片混乱。...类加载的双亲委派模型并不是强制的,用户可以根据需要在某个时间点动态加载类; (3)扩展类加载源,例如从数据库、网络进行类加载; (4)

30710

类加载器以及双亲委派模型

1、小故事理解类加载器以及双亲委派模型 首先我们来描述一个小说场景,通过这个场景在去理解我们相关的类加载器的执行以及双亲委派模型。 上古时代有逍遥派和万魔宗两个宗派,互相对立。...重写findClass()方法 4.3 调用defineClass()方法 ---- 双亲委派模型 1、什么是双亲委派模型?...2、双亲委派模型是如何使用的? 1)我们在自定义加载器中查找是否有需要加载的文件,如果已经加载过,直接返回字节码。...ExtClassLoader到自己指定的 类加载路径下(java.ext.dirs)查看 6) 最后到自定义类加载器指定的路径还没有找到对应XXX.class字节码,则抛出异常ClassNotFoundException 双亲委派有什么好处呢...里面写这么一句代码 System.exit(0); 初始化这个Integer的构造器是会退出JVM,破坏应用程序的正常进行,如果使用双亲委派机制的话该Integer类永远不会被调用,以为委托BootStrapClassLoader

44430

双亲委派机制及打破双亲委派示例

双亲委派机制 在加载类的时候,会一级一级向上委托,判断是否已经加载,从自定义类加载器-》应用类加载器-》扩展类加载器-》启动类加载器,如果到最后都没有加载这个类,则回去加载自己的类。...双亲委托有个弊端: 不能向下委派,不能不委派 怎么打破双亲委派机制:(也就是能向下委派和不委派) 自定义类加载器(不委派) spi机制(向下委派) 打破双亲委派 打破双亲委派的两种方式: 1.通过spi...由于双亲委派模型,父加载器是拿不到通过子加载器加载的类的。这个时候就需要启动类加载器来委托子类来加载Driver实现,从而破坏双亲委派。...自定义类加载器 实现逻辑:自定义类继承classLoader,作为自定义类加载器,重写loadClass方法,不让它执行双亲委派逻辑,从而打破双亲委派。...,从而打破双亲委派 if (name.startsWith("com.chuan")){ c=findClass(

2.2K20

面试官:什么是双亲委派模型

双亲委派模型是 Java 类加载器的一种工作模式,通过这种工作模式,Java 虚拟机将类文件加载到内存中,这样就保证了 Java 程序能够正常的运行起来。那么双亲委派模型究竟说的是啥呢?...加载流程如下图所示: 一般“双亲”指的是“父亲”和“母亲”,而在这里“双亲”指的是类加载类先向上找,再向下找的流程就叫做双亲委派模型。...3.优缺点分析 3.1 优点 双亲委派模型的优点有两个: 1、安全。 2、避免重复加载。...3.1.2 避免重复加载 使用双亲委派模型也可以避免一个类被重复加载,当一个类被加载之后,因为使用的双亲委派模型,这样不会出现多个类加载器都将同一个类重复加载的情况了。...总结 双亲委派模型是和 Java 中多个类加载器(启动类加载器、扩展加载器、应用程序类加载器)的运行规则,通过这个(双亲委派模型)规则可以避免类的非安全问题和类被重复加载的问题,但它也遇到了一些问题,比如

32610

吐槽“双亲委派

最初看到这个“双亲委派”四个字的时候,我是接受的。当时也没什么多余想法,看到名词就感觉这大概就是最权威的。 但,最近我开始怀疑这样的翻译了。...双亲委派?你委派给谁?双亲双亲又是什么?...(摘自《深入理解Java虚拟机》) 通过这个图,我们也无法想象为什么叫 双亲 。明明都只有一个parent。要叫也叫单亲啊。 “双亲委派”这个词估计也不是咱自己生造的,肯定也是从洋文中翻译来的。...这个显然无法翻译成“双亲”啊,即使翻译也应该是 “父委托模型” 或 “父委派模型”。...这个真的无法叫双亲啊,make no sense啊。还不如叫“啃老模型”,如果要正式一点,那建议是:“父委托模型”或“父委派模型”。

2K100

面试官:什么是双亲委派模型

一般提问 JVM 知识点的时候,就会顺带问你双亲委派模型(别扭的翻译。。。)。 就算是不准备面试,学习双亲委派模型对于我们也非常有帮助。...我们比较熟悉的 Tomcat 服务器为了实现 Web 应用的隔离,就自定义了类加载并打破了双亲委派模型。 这篇文章我会先介绍类加载器,再介绍双亲委派模型,这样有助于我们更好地理解。...但是,如果想打破双亲委派模型则需要重写 loadClass() 方法。 双亲委派模型 双亲委派模型介绍 类加载器有很多种,当我们想要加载一个类的时候,具体是哪个类加载器加载呢?...这就需要提到双亲委派模型了。...但是,如果想打破双亲委派模型则需要重写 loadClass() 方法。 为什么是重写 loadClass() 方法打破双亲委派模型呢?

35730
领券