ShouldKnow
1.InstanceKlass(binary) && Class


2.上下文加载器
1.由于java需要操控数据库, 因此内置了jdbc的相关类,这些类由bootstrap加载
2.但是由于双亲委派原则, 不同类加载器加载到类会放在不同的命名空间
并且不同命名空间不能相互访问造成了类加载隔离
3.于是DriverManager.getConnection(“url”)
—>本身会遍历Driver驱动,获取到对应数据库的驱动来解析url等数据
4.但是由于这些Driver驱动都是第三方提供的, 由AppClassLoader加载, 因此DriverManager遍历不到他们

==================
那么DriverManager到底是如何找到jar包中要加载到依赖呢?
SPI(Service Provider Interface)在 Java 里是一种 动态发现与注册机制,
本质是“接口 + 配置文件 + 类加载器”,
用来解决 上层接口想调用下层实现类,但默认看不到下层类 的问题。
driver接口的子实现类


JDBC的DriverManager类在rt.jar包内, 由启动类加载器加载,
驱动的全限定名通过spi来获取,但加载驱动没法通过启动类加载器,因为不在其加载路径内

并没有打破双亲委派机制
小g时刻