JDBC4.0如何加载
-
引入依赖
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.32</version> </dependency>
-
上代码
import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class DatabaseUtil { public static Connection getConnection() throws SQLException { // 驱动会自动注册,无需手动加载 String url = "jdbc:mysql://localhost:3306/mydb"; String user = "user"; String password = "password"; return DriverManager.getConnection(url, user, password); } }
在这个过程中,如何加载到mysql-connector-java的呢?
进入DriverManager类中会发现如下内容:
走到loadInitialDrivers()
方法中看:
会发现他去加载了Driver.class
,而这个类是rt.jar
里的一个接口
从上面的run()
方法中,不难看出利用了ServiceLoader.load()
,去加载了他的实现类
ServiceLoader<Driver> loadedDrivers = ServiceLoader.load(Driver.class);
Iterator<Driver> driversIterator = loadedDrivers.iterator();
try{
while(driversIterator.hasNext()) {
driversIterator.next();
}
} catch(Throwable t) {
// Do nothing
}
再看下ServiceLoader
类中:
通过Iterator<Driver> driversIterator = loadedDrivers.iterator();
while(driversIterator.hasNext()) {
driversIterator.next();
}
去迭代获取加载Driver
,而,我们的MySQL驱动就在其中:
通过以上步骤,就可以明白 com.mysql:mysql-connector-j:8.0.32
中的驱动是如何加载的了