jdbc为什么要破坏双亲委派机制
首先需要注意一点,
JDBC4.0之前使用Class.forName("")方式加载驱动是不会破坏双亲委派的。
JDBC4.0之后使用spi机制才会破坏双亲委派机制。
为什么要破坏双亲委派?
使用双亲委派也存在一定的局限性,在正常情况下,用户代码是依赖核心类库的,所以按照正常的双亲委派加载流程是没问题的;
但是在加载核心类库时,如果需要使用用户代码,双亲委派流程就无法满足;
比如在使用JDBC时, 利用DriverManager.getConnection获取连接时,就会存在这样的问题。
DriverManager是由根类加载器Bootstrap加载的,在加载DriverManager时,会执行其静态方法,加载初始驱动程序,也就是Driver接口的实现类;但是这些实现类基本都是第三方厂商提供的,根据双亲委派原则,第三方的类不可能被根类加载器加载。