Java spi

一、spi(Service Provider Interface)介绍

           定义一套统一的接口规范,通过第三方厂商去实现。厂商已经将接口进行实现,并将实现的全路径防止在jar包的指定目录下。

      当使用的时候只需要将要实现的jar包引入到项目中,jdk会使用java.util.ServiceLoader类,通过到指定位置,

      根据全路径的名称使用classLoader对实现类进行加载。

二、spi需要遵循的标准

        1、需要统一的加载目录:resources/META-INF/services

        2、在services目录下创建一个配置文件,满足:

            1)、文件名是扩展(接口实现)的接口的全名

            2)、文件内部的内容是实现接口的实现类的全路径

            3)、文件的编码必须为UTF-8

        3、java.util.ServiceLoader(使用该类,通过到指定位置,根据全路径的名称使用classLoader对实现类进行加载)


三、java spi的缺点

        1、当引入了多个实现的时候,会一次性将所有的实现全部进行加载,若扩展实现存在很多消耗很大并并且在项目中没有使用到,则是完全的浪费。

        2、扩展的实现点加载失败,会导致整个方法不能进行调用(并且问题很难进行跟踪查找)。


四、spi机制(思想)的应用

        1、jdk提供的Driver(数据库链接,jdk中只是提出了规范,mysql或者oracle等厂商进行实现)

        2、dubbo (dubbo对原生的Java spi进行了改进,所有的模块)

            1)、 dubbo中实现是使用key、value的形式,中间使用extension的转化,所以不会对所有的实现进行加载

            2)、并且实现了spi的注解方式,非常方便

        3、spring

        4、spring boot 中的factories

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值