https://blog.csdn.net/atongmu2017/article/details/93649837
通过Thread.currentThread().setContextClassLoader("自定义加载器");可以打破双亲委派,让自定义的加载器去加载class文件
spi机制就是通过打破双亲委派来实现的:
比如接口:java.sql.Driver,目录在jdk\jre\lib\rt.jar中,很明显Driver由根加载器加载(BootStrapClassLoader),而真正的Driver通常由不同的厂家自己实现,实现类(比如是DruidDriver)是由AppClassloader加载,这个
加载器加载我们自己的代码。当通过DriverManager类来获取Driver的具体实现功能时(需要加载DruidDriver),此时的加载器是BootStrapClassLoader,但是还必须要加载到由AppClassloader加载的类(DruidDriver),
又因为委派不能向下委派,所以此处必须打破双亲委派才能实现。
当A类被bootLoader加载了,之后如果当前线程的加载器为自定义加载器时,重新new A类,则A类会被重新加载,此时重新new A类和刚开始被bootLoader加载的A类是无法通过强转转换的,因为类加载器不同。