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
中的驱动是如何加载的了