Java中的SPI机制

SPI机制:是JDK内置的一种提供服务发现的机制。动态的为某个接口寻找服务的实现,将装配的控制权移到程序之外。
当服务的提供者提供了服务接口的一种实现之后,必须根据SPI约定在 META-INF/services/ 目录里创建一个以服务接口命名的文件,该文件里写的就是实现该服务接口的具体实现类。当程序调用ServiceLoader的load方法的时候,ServiceLoader能够通过约定的目录找到指定的文件,并装载实例化,完成服务的发现。

例:JDBC的SPI机制

               String url = "jdbc:mysql://localhost:3306/wangyiyun";
               Connection conn = DriverManager.getConnection(url, "root", "123456");
               // 拼写SQL语句
               String sql = "select * from t_user where username = ? and password = ?";
               // 4.调用执行者对象方法,执行SQL语句获取结果集
               // 返回的是ResultSet接口的实现类对象,实现类在mysql驱动中
               PreparedStatement ptmt = conn.prepareStatement(sql);
               ptmt.setString(1,username);
               ptmt.setString(2,password);
               ResultSet rs = ptmt.executeQuery();

DriverManager

不用Class.forName()获取JDBC驱动,直接根据数据库厂商提供的META-INF/services/ 文件,利用SPI机制进行驱动加载。

参照:mysql-connector-java-8.0.15.jar

1、首先DriverManager 需要加载 静态代码块中的loadInitialDrivers()方法进行初始化

image.png

2、SPI机制的实现,ServiceLoader是java的SPI机制的实现,通过ServiceLoader.load()方法会加载所有在META-INF/services/文件夹下的Driver文件,找到Driver接口的扩展实现类

image.png

image.png

找到接口扩展实现类后,ClassLoader加载扩展实现类,在静态代码块中进行数据库驱动注册

image.png



作者:一个头发茂密的程序员
链接:https://www.jianshu.com/p/4565e95fd134
 

相关资源:

GitOps 初探 - Dcsdn

mysql教程 - Dcsdn

Python入门基础教程全套 - Dcsdn

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值