码迷,mamicode.com
首页 > 其他好文 > 详细

SPI机制之JDK中的SPI

时间:2021-06-11 18:26:49      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:三方   classpath   主程序   默认   分离   ade   情况   loader   http   

  首先简单阐述下什么是SPI:SPI 全称为 (Service Provider Interface) ,是JDK内置的一种服务提供发现机制。目前有不少框架用它来做服务的扩展发现,简单来说,就是一种动态替换发现的机制。使用SPI机制的优势是实现解耦,使得第三方服务模块的装配控制逻辑与调用者的业务代码分离。

  SPI遵循如下约定:    

    1、当服务提供者提供了接口的一种具体实现后,在META-INF/services目录下创建一个以接口全限定名为命名的文件,内容为实现类的全限定名;

    2、接口实现类所在的jar包放在主程序的classpath中;

    3、主程序通过java.util.ServiceLoader动态装载实现模块,它通过扫描META-INF/services目录下的配置文件找到实现类的全限定名,把类加载到JVM

    4SPI的实现类必须携带一个无参构造方法;
  
JDK中的SPI具体实践如下:

    1、提供标准服务接口
      技术图片

     2、接口实现

      技术图片

    3、META-INF/services目录下创建一个以接口全限定名为命名的文件,内容为实现类的全限定名

       技术图片

     4、使用:接口实现类所在的jar包放在主程序的classpath

      调用实现类的应用pom.xml增加实现类所在jar的依赖:

      技术图片

     5、主程序通过java.util.ServiceLoader动态装载实现模块

      技术图片

    执行主程序,结果如下:

      技术图片

  如果接口实现类所在的jar包不放在主程序的classpath中,执行结果如何?

    对于上述第四步,实现依赖注释

      技术图片

    执行主程序后结果如下:

      技术图片

     即实现类没有成功加载。

  对于SPI约定中提到的SPI的实现类必须携带一个无参构造方法,在上面的接口实现中并没有提供一个无参的构造函数,可以理解为此种情况默认使用隐式的构造函数。

 

 

    

SPI机制之JDK中的SPI

标签:三方   classpath   主程序   默认   分离   ade   情况   loader   http   

原文地址:https://www.cnblogs.com/ilovebath/p/14869476.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!