你知道 “双亲委派模型“ 的“企业级应用“吗?

本文介绍了如何打破Java的双亲委派模型,以解决特定场景下的问题。从JDBC SPI的实现、Tomcat的WebApp隔离加载、SpringBoot的启动加载、热加载和处理jar包冲突的角度,详细解析了类加载器如何在各个场景中工作,以实现功能需求和提高灵活性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

在JVM专栏的第一篇:我们讲了什么是双亲委派模型,以及为什么需要双亲委派模型。还没看过的大佬,有钱没钱都捧个人场,点它: 你能说出jvm的类加载是什么吗

同时还了解到这样设计是为了保持JVM整个体系的稳定。但在某些场景下,稳定恰恰是一种掣肘,我们需要的是打破这种模型(好像有点标题党了)。

接下来我们就来一一简单介绍下打破双亲委派模型的多个企业级应用

JDBC-SPI

打破背景

为了更加灵活的连接数据库,我们的JDK定义了Driver接口,需要与数据库进行连接的包必须实现该接口。例如:MySQL,建议去观察下项目中mysql-connector包,下面就有实现类的全限定类名。

打破原因

在上述背景下,执行 DriverManager类的方法时,需要去加载实现类。还记得我们第一篇文章讲的 BootStrapClassLoader吗,它只能加载rt.jar下的类。而MySQL的加载路径隶属于AppClassLoader,所以理论上它压根就不能被加载。

于是线程上下文类加载器就应运而生,由于ThreadClassLoader一般情况下==AppClassLoader。于是通过线程上下文类加载器加载JDBC实现类,打破了双亲委派模型,顺利实现功能。

源码解读

  1. 查看DriverMana
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值