美文网首页
java与SPI

java与SPI

作者: 靈08_1024 | 来源:发表于2019-05-29 16:58 被阅读0次

现在大家连数据库估计已经很少用JDBC了,我也是最近发现在JDBC4.0以后(对应JDK7+),JDBC不用写Class.forName了。这时候就要扯进来一个技术——SPI(Service Provider Interface)。它是用来动态实现接口的。而在JDK中典型的用到该技术的,就是JDBC了。

现在JDBC获取连接如下:

Connection connection = DriverManager.getConnection("http://url", "username", "pwd");

跟进DriverManager.class,有一段static代码:

    static {
        loadInitialDrivers();
        println("JDBC DriverManager initialized");
    }

java.sql.DriverManager#loadInitialDrivers中,有下面一句话:

ServiceLoader<Driver> loadedDrivers = ServiceLoader.load(Driver.class);

从这句话就会加载出N多的Driver,你所添加的都有。
本次测试使用的mysql的jar,mysql的原来的classForName是com.mysql.jdbc.Driver,跟进此类,发现在此类的jar下有一文件夹:META_INF/services,内有一文件java.sql.Driver。这个文件名正好是上面load方法中Driver的全路径名。

image.png

这个也是一个类,其唯一实现是com.mysql.jdbc.Driver类。

由此我们可以理出,SPI就是在根目录下,建一文件夹META_INF/services,你想动态加载什么接口将某接口的全路径名称定义为一文件名,内部每一行写一个实现类的全类名。然后在加载时会将该文件中所有的类都加载进去。


该功能旨在统一不同厂商的不同实现,A制定标准,其他采用A方案者进行实现他自己的内容,A只需要在指定地方加载某些实现的文件即可。

该功能在Spring 和dubbo 中,有注解@SPI,在spring boot中体现为自动装配

相关文章

  • Dubbo SPI 的使用方法(一)- 扩展点自动包装

    开篇 前面有说到 Java SPI 的介绍与使用方法, 而本篇要说的 Dubbo SPI 是基于 Java SPI...

  • Java - SPI机制

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

  • dubbo 源码分析 -SPI

    dubbo 中大量使用SPI,在看源码之前必须先了解dubbo的SPI 1、Java原生spi java原生spi...

  • spi

    java中有一些包结尾为spi,如java.nio.channels.spi spi - service prov...

  • 4.Dubbo的SPI扩展点加载机制

    4.1 加载机制概述 4.1.1 Java SPI 在讲Dubbo SPI之前,先来了解一下Java SPI,SP...

  • java与SPI

    现在大家连数据库估计已经很少用JDBC了,我也是最近发现在JDBC4.0以后(对应JDK7+),JDBC不用写Cl...

  • Dubbo SPI的认识

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

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

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

  • dubbo spi机制源码阅读

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

  • dubbo的spi机制

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

网友评论

      本文标题:java与SPI

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