美文网首页
Java的SPI机制

Java的SPI机制

作者: 孙先森不可不弘毅 | 来源:发表于2018-07-10 17:02 被阅读0次

SPI的概念

英文全称为Service Provider Interface

是JDK内置的一种服务提供发现机制

SPI机制可以在不修改jar包或框架的情况下,为API接口提供新的实现

SPI机制的约定

  • 具体做法
    1. META-INF/services/目录中创建以接口全限定名命名的文件该文件内容为API具体实现类的全限定名,例如:
      接口为ObjectSerializer
      文件内的内容如下:
       com.blueskykong.javaspi.serializer.KryoSerializer
       com.blueskykong.javaspi.serializer.JavaSerializer
      
    2. 使用ServiceLoader类动态加载META-INF中的实现类
       ServiceLoader<ObjectSerializer> objectSerializers = ServiceLoader.load(ObjectSerializer.class)
       Iterator<ObjectSerializer> objectSerializerIterator= objectSerializers.iterator();
       // 之后就可以通过objectSerializerIterator.next()按顺序获取实现类
      
    3. 如果SPI的实现类为jar,则需要放在当前程序classpath
    4. API具体实现类必须有一个不带参数的构造方法

SPI用途

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

参考

Java SPI机制详解
Java的SPI机制与简单的示例

相关文章

网友评论

      本文标题:Java的SPI机制

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