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时刻
