JDBC加载MySQL驱动【底层实现】

JDBC4.0如何加载

  1. 引入依赖

      <dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
          <version>8.0.32</version>
      </dependency>
    
  2. 上代码

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

posted @   DAawson  阅读(47)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示