DriverManager.getConnection()是怎么确定用哪个DriverClass?
假设我调用了一次Class.forName(MySqlDriver),然后又调用了一次Class.forName(OracleDriver),这样就向DriverManager中注册了两个驱动。这时候再调用getConnection(),会用哪个driver?
我大概看了一下getConnection的源码,getConnection()方法会迭代DriverManager中注册的所有的DriverInfo,通过isDriverAllowed接口判断当前driver是否被使用,(见图)。

isDriverAllowed中又调用了Class.forName()根据当前driver的Name和classloader加载一个Driver与当前Driver比较。但是Class.forName()里的逻辑就看不懂了,(如图)

求大神指教。
关于isDriverAllowed,我在想,因为我调用两次Class.forName(DriverName)时,都是在一个方法中,那么遍历这些Driver所获取的classloader不都是一样的吗?然后根据name和classloader获取的driver肯定也和当前的相等啊,这样isDriverAllowed还有什么意义?
难道我调用Class.forName(OracleDriver)会把之前注册的MySqlDriver覆盖掉?但是我看了DriverManager.registerDriver()的逻辑,在注册的时候只会判断之前的集合中有没有同一个driver类啊,如果没有就会添加。也就是说MySqlDriver和OracleDriver都会被添加才对。。。
还有,classLoader是根据Reflection.getCallerClass()获取的,这个接口的作用不是太懂。。。