参考:
https://zhuanlan.zhihu.com/p/375952538
https://www.jianshu.com/p/5d7a72427679
1:双亲委派机制中 bootstrapClassLoader(引导类) 与EXTCL(额外),applicationClassLoader(系统类) 中的意义与类加载流程
①: 每个ClassLoader都只能加载自己所绑定目录下的资源;
②:在原有加载机制下:类与依赖类都将由同一个类加载器完成
我们在Application加载类的时候可以选的:
1. 系统类加载器SystemClassLoader,可通过ClassLoader.getSystemClassLoader()获得;
2. 当前ClassLoader:加载了当前类的ClassLoader;
3. 线程上下文类加载器ContextClassLoader:Thread.currentThread().getContextClassLoader();
4. 自定义类加载器;
但是对于SPI机制,接口类都是通过bootstrapClassloader加载,但是其实现类在classpath下,将无法找到实现类完成加载;
所以此时有两个办法:告诉当前的方法使用哪个类加载器去完成加载实现类的加载,比如作为参数传入,或者将其设置为当前线程的contextClassloader;
具体工作将由Class.forName(target.class, boolean, contextClassLoader)完成对类的加载;
具体实现流程可参考: DriverManager.getConnection