乐趣区

关于java:DriverManager类如何利用线程上下文类加载器加载javasqlDriver实现类

1. 测试环境搭建:

1. 在 pom 文件中导入 mysql-connector-java 依赖

<dependency>
 <groupId>mysql</groupId>
 <artifactId>mysql-connector-java</artifactId>
 <scope>runtime</scope>
</dependency>

2. 搭建测试类

2. DriverManager 初始化流程剖析

2.1 在 static 动态代码块中执行 loadInitialDrivers() 办法

2.2 在 loadInitialDrivers() 办法中执行 ServiceLoader.load(Driver.class) 代码

咱们看他前面又调用了一次 load 办法,在这个 load 办法外面它就会返回咱们在 DriverManager 的 loadInitialDrivers() 办法外面须要的 ServiceLoader 对象

而后会调用 reload 办法去新建一个 LazyIterator 迭代器

2.3 在 loadInitialDrivers() 办法中执行 loadedDrivers.iterator() 获取迭代器

2.4 在 loadInitialDrivers() 办法中执行 driversIterator.hasNext() 来判断是否有实现类

2.4 在 loadInitialDrivers() 办法中执行 driversIterator.next() 办法来获取实现类

2.5 补充:在加载 Driver 实现类时,会触发 static 动态代码块,将 Driver 实现类的对象存入 DriverManager 的 CopyOnWriteArrayList 容器中

退出移动版