关于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容器中

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理