27_线程上下文类加载器分析与实现

设置线程上下文的类加载器
在这里插入图片描述
下列2个输出,应该是什么?
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
将应用类加载器默认赋值给当前线程的类加载器

在这里插入图片描述

在这里插入图片描述
通过Mysql的jdbc驱动举例:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上图中,第一行代码中,只给一个驱动的接口,该接口是顶层接口,由启动类加载器加载。
下面几行代码,就能找到具体的由APPClassLoader类加载器加载的驱动实现
在这里插入图片描述
为什么?说好的命名空间呢?
在这里插入图片描述
serviceLoader,主要是加载服务具体的实现,服务就是一个包含各种接口或抽象的类的集合,服务提供者就是一个服务对应的特定实现。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
此文件内容:
在这里插入图片描述
就是上文中遍历出来的2个驱动。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
此load方法中
在这里插入图片描述
应用类加载器会将 serviceLoader交给父加载器加载,最终由启动类加载器加载。
所以,启动类加载器也会加载上图中load方法中的2行代码
若是没有在这里插入图片描述
那么,启动类加载器就不会加载到classpath下的mysql驱动。

所以,加上当前线程的类加载器后,获得传入的应用类加载器,就可以加载到mysql驱动实现。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
打破双亲委托机制的是
在这里插入图片描述
再来看看刚开始的输出
在这里插入图片描述
在这里插入图片描述
若是传入的类加载器为扩展类加载器
在这里插入图片描述
在这里插入图片描述
那么while循环没有运行,也就是说,没有加载到驱动的实现

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值