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