呵呵,核心在于DriverManager有一个方法比较狠,可以得到调用者的装载器
private static native ClassLoader getCallerClassLoader();要知道,在你的类里Class.forName()加载Driver类时用的装载器就是你的类的装载器。DriverManager既然得到了你的类的装载器也就得到了加载Driver类的装载器
装载器里记录了所有你的类加载的类名同时,按规范,Driver类静态初始化时也就是Class.forName()时要向DriverManager注册,这样,DriverManager记录了所有JVM里的Driver的列表于是,当你DriverManager.getConnection()时,DriverManager查询所有你加载的类名,看是否在列表里出现,找到了,就调用Driver的connect给你返回,否则,抛个异常给你想知道private static native ClassLoader getCallerClassLoader();方法的细节吗?