美文网首页
Java中的SPI机制

Java中的SPI机制

作者: 一个头发茂密的程序员 | 来源:发表于2021-02-02 12:46 被阅读0次

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 image.png image.png

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


image.png

相关文章

  • dubbo的spi机制

    SPI SPI是一种扩展机制,在java中SPI机制被广泛应用,比如Spring中的SpringServletCo...

  • Java中的SPI机制及接口多实现调用

    Java中的SPI机制及接口多实现调用 0x00 SPI机制 SPI 全称为 (Service Provider ...

  • dubbo的spi机制

    dubbo的spi机制 dubbo的扩展点加载机制源自于java的spi扩展机制。那么,何为java的spi扩展机...

  • 轻量级RPC设计与实现第四版

    在本版本中引入了SPI机制,关于Java的SPI机制与Dubbo的SPI机制在以前的文章中介绍过。传送门:Dubb...

  • Java - SPI机制

    Java - SPI机制 SPI是什么 SPI全称Service Provider Interface,是Java...

  • Dubbo SPI的认识

    Dubbo是基于Java原生SPI机制思想的一个改进. 关于JAVA 的SPI机制 SPI全称(service p...

  • dubbo spi机制源码阅读

    dubbo的扩展能力很强大。他是通过扩展Java的spi机制得到的。 Java Spi机制介绍 SPI是Servi...

  • Dubbo SPI

    Java提供了SPI机制(ServiceLoader)来进行服务发现,而Dubbo中的扩展点同样使用了SPI机制进...

  • 基于spring factories机制开发SDK

    SPI机制:为某个接口寻找服务实现的机制 java SPI就是提供这样的一个机制 ,需要在META-INF目录中设...

  • Java编程技术之浅析SPI服务发现机制

    SPI服务发现机制 SPI是Java JDK内部提供的一种服务发现机制。 SPI->Service Provide...

网友评论

      本文标题:Java中的SPI机制

      本文链接:https://www.haomeiwen.com/subject/ihzetltx.html