首页 > 其他分享 >什么是SPI机制?

什么是SPI机制?

时间:2023-04-22 19:33:05浏览次数:38  
标签:java jar 什么 Driver 接口 SPI mysql 机制

SPI(Service Provider Interface),是JDK内置的一种 服务提供发现机制,可以用来启用框架扩展和替换组件,主要是被框架的开发人员使用,比如java.sql.Driver接口,其他不同厂商可以针对同一接口做出不同的实现,MySQL和PostgreSQL都有不同的实现提供给用户,而Java的SPI机制可以为某个接口寻找服务实现。Java中SPI机制主要思想是将装配的控制权移到程序之外,在模块化设计中这个机制尤其重要,其核心思想就是 解耦

SPI整体机制图如下:


 当服务的提供者提供了一种接口的实现之后,需要在classpath下的META-INF/services/目录里创建一个以服务接口命名的文件,这个文件里的内容就是这个接口的具体的实现类。当其他的程序需要这个服务的时候,就可以通过查找这个jar包(一般都是以jar包做依赖)的META-INF/services/中的配置文件,配置文件中有接口的具体实现类名,可以根据这个类名进行加载实例化,就可以使用该服务了。JDK中查找服务的实现的工具类是:java.util.ServiceLoader


SPI机制的应用?

  • SPI机制 - JDBC DriverManager

在JDBC4.0之前,我们开发有连接数据库的时候,通常会用Class.forName("com.mysql.jdbc.Driver")这句先加载数据库相关的驱动,然后再进行获取连接等的操作。而JDBC4.0之后不需要用Class.forName("com.mysql.jdbc.Driver")来加载驱动,直接获取连接就可以了,现在这种方式就是使用了Java的SPI扩展机制来实现

  • JDBC接口定义

首先在java中定义了接口java.sql.Driver,并没有具体的实现,具体的实现都是由不同厂商来提供的。

  • mysql实现

在mysql的jar包mysql-connector-java-6.0.6.jar中,可以找到META-INF/services目录,该目录下会有一个名字为java.sql.Driver的文件,文件内容是com.mysql.cj.jdbc.Driver,这里面的内容就是针对Java中定义的接口的实现。

  • postgresql实现

同样在postgresql的jar包postgresql-42.0.0.jar中,也可以找到同样的配置文件,文件内容是org.postgresql.Driver,这是postgresql对Java的java.sql.Driver的实现。

  • 使用方法

上面说了,现在使用SPI扩展来加载具体的驱动,我们在Java中写连接数据库的代码的时候,不需要再使用Class.forName("com.mysql.jdbc.Driver")来加载驱动了,而是直接使用如下代码:


 

标签:java,jar,什么,Driver,接口,SPI,mysql,机制
From: https://www.cnblogs.com/cnetsa/p/17343751.html

相关文章

  • 什么是软件开发领域的 obsolete 或者 deprecated 含义
    我们在学习一门编程语言或者说使用一些工具API时,经常会看到文档或者API参数说明里,标注了obsolete,deprecated,deprecation等字眼。这些单词代表什么含义呢?obsolete特性在软件设计领域,obsolete特性代表着某些功能或API已经被废弃或不再被建议使用。这些特性可能是由于技......
  • 什么是软件的 Legal Disclosure?
    软件的Legaldisclosure指的是软件开发者或发布者为了合法合规地向用户提供软件服务而提供的法律声明和公告。这些声明通常包括软件的版权信息、许可证信息、使用条款和隐私政策等内容。版权信息声明通常包括软件的作者和所有者,以及软件的版权说明和保留条款。许可证信息则涉及......
  • 什么是软件开发领域的 disruptive innovation
    “Disruptiveinnovation”(颠覆性创新)是由哈佛商学院教授克莱顿·克里斯坦森提出的概念,指的是一种新技术、新产品或新服务,能够彻底颠覆传统市场和商业模式,重新定义行业格局和规则。通常情况下,这种创新并非针对已有的市场和客户需求,而是面向未开发或不满足市场需求的新领域。创新......
  • 为什么是cat.start
       ......
  • 什么是等保(信息安全等级保护)?
    什么是等保(信息安全等级保护)?一、什么是等保?“等保”,即信息安全等级保护,是我国网络安全领域的基本国策、基本制度。早在2017年8月,公安部评估中心就根据网信办和信安标委的意见将等级保护在编的5个基本要求分册标准进行了合并形成《信息安全技术网络安全等级保护基本要求》一个标......
  • 为什么Sync.Pool不需要加锁却能保证线程安全
    1.简介我们在Sync.Pool:提高go语言程序性能的关键一步一文中,已经了解了使用sync.Pool来实现对象的复用以减少对象的频繁创建和销毁,以及使用sync.Pool的一些常见注意事项。在这篇文章中,我们将剖析sync.Pool内部实现中,介绍了sync.Pool比较巧妙的内部设计思路以及其实现方式。......
  • PyTorch项目实战05——Tensor的广播机制
    1广播机制介绍矩阵运算,往往只能在两个矩阵维度相同或者相匹配时才能运算。比如加减法需要两个矩阵的维度相同,乘法需要前一个矩阵的列数与后一个矩阵的行数相等。当参与运算的两个维度不同也不匹配的矩阵进行运算时,该机制会对数组进行扩展,使数组的shape属性值一样,这样,就可以进行矢......
  • 扎实打牢数据结构算法根基,从此不怕算法面试系列之001 week01 02-01 什么是算法?
    1、什么是算法?为了明确什么是算法,我们会从简单的查找功能开始讲起。查找其实一个一个非常简单的算法,但我们会为这个查找功能的算法做如下工作:让查找的功能适应更多的数据类型通过查找的例子讲解如何编写正确的程序?为查找算法性能测试对一些常见算法做复杂度分析2、定义算法Algorit......
  • 什么是收敛域名?
    收敛域名收敛域名是指在网络拓扑结构中,一个域名解析的结果能够收敛到同一个IP地址。简单来说,就是同一个域名在不同网络环境中解析的结果相同,不会出现解析到不同IP地址的情况。这样可以保证网络的稳定性和安全性。假设有一个网站的域名是www.example.com,它的IP地址是192.0.2.1。......
  • L17_用日语表达自己正在做什么
    概述想要表达自己正在做什么,可以采用:动词的て形+います的句式,即~ています旅行ですか在旅行吗?はい、あちこち旅行しています是的正在到处旅行日本語を勉強する=>日本語を勉強しています(正在学习日语)しごとをする=>仕事をしています(正在工作)动画会......