JDBC破坏双亲委派机制--源码解析

JDBC破坏双亲委派机制

java有自己的一套 资源管理服务JNDI 等等,是由启动类加载器加载的,说明类是放在rt.jar包中。java提供Driver接口,厂商根据自己的需求实现功能。

双亲委派机制:当前类加载器收到类加载的请求后,先不自己尝试加载类,而是先将请求委派给父类加载器,调用父类的 loadClass() 方法,这是一个递归的过程(因此,所有的类加载请求,都会先被传送到启动类加载器),只有当父类加载器加载失败时,当前类加载器才会尝试自己去自己负责的区域加载。

所以判断是否破坏双亲委派机制的一个重要指标是类加载的请求顺序

未破坏双亲委派机制的情况

下面是我们连接数据库常用的代码;

String url = "jdbc:mysql://localhost:3306/blog?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai&zeroDateTimeBehavior=CONVERT_TO_NULL";
String username = "root";
String password = "root";
String driverClassName = "com.mysql.cj.jdbc.Driver";
// 注册驱动
Class.forName(driverClassName);
// 获取连接
Connection connection = DriverManager.getConnection(url, username, password);
System.out.println("数据库连接成功 --》" + connection);

我们点进java的Driver接口,可以看到:

package java.sql;

import java.util.logging.Logger;

public interface Driver {
   

    Connection connect(String url, java.util.Properties info)
        throws SQLException;

    boolean acceptsURL(String url) throws SQLException;

    DriverPropertyInfo[] getPropertyInfo(String url, java.util.Properties info)
                         throws SQLException;
    int getMajorVersion();

    int getMinorVersion();

    boolean jdbcCompliant();

    public Logger getParentLogger() throws SQLFeatureNotSupportedException;
}

所以上面的方法都需要厂商来实现。

  • 第一步注册驱动,在DriverManager 类中实现

java 提供了DriverManager来管理各种驱动(Driver),点进看源码:

public class DriverManager {
   

    // List of registered JDBC drivers
    // 存储已经注册的驱动,这是一个由 JUC 下 ReentrantLock 实现的可以高并发的 List ,
    // 如果想要注册驱动,就需要 调用 addIfAbsent 方法添加进 List。
    private final static CopyOnWriteArrayList<DriverInfo> registeredDrivers = new CopyOnWriteArrayList<>(
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值