浅谈Java SPI 和Dubbo SPI

相信在学习dubbo的同学肯定了解到一个机制 spi 机制,我们的java 中也有一个 spi机制,小白(我)就想了解下他们之间有什么不同。

Java SPI 机制

SPI(Service Provider Interface),Java提供的一套用来被第三方实现或扩展的API。

在Java当中他怎样实现呢

首先我们需要提供一个接口

 然后来书写几个接口的实现类

然后我们去配置一个 META-INF/service/com.xxxxxx.xxx.xxx.UserService(这个是文件,以我们的接口类名来命名)   然后文件内容 书写上 我们的 接口实现的类名

 然后我们进行测试  (根据我们的书写的类名加载实例化)

测试成功

到这里,感觉我们的java spi机制能帮我们一个大忙 ,他能帮我们调用我们的实现类,达到了解耦的效果。但是这种机制仍然有他不足的地方,通过debug进去我们一步一步分析就能发现,他是需要遍历所有的实现类并且实例化,不能按照我们所想要的实现类来实例化,当我们寻找所需的实现类的时候还需要在遍历中找到(大伙的想法估计也是想能直接拿到指定的实现类,同时也不想加载不用的实现类让资源浪费掉)。  带着问题来看dubbo 的 spi机制

Dubbo SPI 机制(他帮助我们解决了这个问题)

首先 Dubbo没有采用JAVA原生态的SPI,但是对他进行了加强,这些加强肯定针对Java SPI  上的一些不足进行了解决。

首先我们书写服务的接口,不过我们需要加上一个 SPI的注解 

书写几个接口的实现类

 重点来了  书写我们的配置文件   

分三类

1.  /META-INF/services/xxxxx          这个是用来兼容我们的JAVA spi的

2.  /META-INF/dubbo/xxxxxx            这个是存放我们用户自定会议的 SPI配置文件

3.  /META-INF/dubbo/internal/xxxxxx    这个是存放dubbo内部使用的spi配置文件

这里我用的是第二个  (写好配置文件) 

不难发现 这里跟我们的 java spi的 配置文件有不同的地方 每个实现类名前对应了一个name,那他就应该是帮助我们拿到指定实现类的name

进行测试

进行测试确实如此 

这里我们就能看出其实dubbo中的 spi 确实进行了增强,当然仅仅一个小测试还体现不出他的强大,在dubbo中底层当中(接口暴露,服务引用,服务调用)通过大家的学习更能体会到dubbo对SPI机制的使用。

(有问题希望大家指正,互帮互助,技术更上一层楼)

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值