在查找类加载器和双亲委派相关的文章时想找一个违反双亲委派相关的例子,网上说jdbc就属于违法双亲委派的典型,虽然最后发现其实并没有违反双亲委派,但也把这东西总结一下,发个博客吧
我们平时写jdbc时通常会像下面这样创建
Class.forName(driver);
conn = DriverManager.getConnection(url,username,password);
我们知道,Class.forName(driver),实际上只调用了对应的驱动包中的一段静态块,如下
public class Driver extends NonRegisteringDriver implements java.sql.Driver {
public Driver() throws SQLException {
}
static {
try {
DriverManager.registerDriver(new Driver());
} catch (SQLException var1) {
throw new RuntimeException("Can't register driver!");
}
}
}
而registerDriver方法最终调用了addIfAbsent方法将驱动包传入的类添加进DriverManager的一个集合中
public static void registerDriver(java.sql.Driver driver,
DriverAction da)
throws SQLException {
/* Register the driver if it has not already been added to