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容器中
发表回复