• 微信公众号:美女很有趣。 工作之余,放松一下,关注即送10G+美女照片!

双亲委派 classLoader相关

开发技术 开发技术 6天前 8次浏览

https://blog.csdn.net/atongmu2017/article/details/93649837

 

通过Thread.currentThread().setContextClassLoader(“自定义加载器”);可以打破双亲委派,让自定义的加载器去加载class文件

spi机制就是通过打破双亲委派来实现的:

比如接口:java.sql.Driver,目录在jdkjrelibrt.jar中,很明显Driver由根加载器加载(BootStrapClassLoader),而真正的Driver通常由不同的厂家自己实现,实现类(比如是DruidDriver)是由AppClassloader加载,这个

加载器加载我们自己的代码。当通过DriverManager类来获取Driver的具体实现功能时(需要加载DruidDriver),此时的加载器是BootStrapClassLoader,但是还必须要加载到由AppClassloader加载的类(DruidDriver),

又因为委派不能向下委派,所以此处必须打破双亲委派才能实现。

 

当A类被bootLoader加载了,之后如果当前线程的加载器为自定义加载器时,重新new A类,则A类会被重新加载,此时重新new A类和刚开始被bootLoader加载的A类是无法通过强转转换的,因为类加载器不同。


程序员灯塔
转载请注明原文链接:双亲委派 classLoader相关
喜欢 (0)