前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Dubbo SPI的认识

Dubbo SPI的认识

作者头像
名字是乱打的
发布2021-12-23 17:54:29
1940
发布2021-12-23 17:54:29
举报
文章被收录于专栏:软件工程软件工程

Dubbo中,SPI是一个非常核心的机制,贯穿在几乎所有的流程中。

Dubbo是基于Java原生SPI机制思想的一个改进.

关于JAVA 的SPI机制

SPI全称(service provider interface),是JDK内置的一种服务提供发现机制,目前市面上有很多框架都是用它来做服务的扩展发现,大家耳熟能详的如JDBC、日志框架都有用到; 简单来说,它是一种动态替换发现的机制。举个简单的例子,如果我们定义了一个规范,需要第三方厂商去实现,那么对于我们应用方来说,只需要集成对应厂商的插件,既可以完成对应规范的实现机制。 形成一种插拔式的扩展手段。

SPI规范总结

实现SPI,就需要按照SPI本身定义的规范来进行配置,SPI规范如下

  • 1.需要在classpath下创建一个目录,该目录命名必须是:META-INF/services
  • 2.在该目录下创建一个properties文件,该文件需要满足以下几个条件
    • a)文件名必须是扩展的接口的全路径名称
    • b)文件内部描述的是该扩展接口的所有实现类
    • c)文件的编码格式是UTF-8
  • 3.通过java.util.ServiceLoader的加载机制来发现
SPI的缺点
  1. JDK标准的SPI会一次性加载实例化扩展点的所有实现,什么意思呢?就是如果你在META-INF/service下的文件里面加了N个实现类,那么JDK启动的时候都会一次性全部加载。那么如果有的扩展点实现初始化很耗时或者如果有些实现类并没有用到,那么会很浪费资源
  2. 如果扩展点加载失败,会导致调用方报错,而且这个错误很难定位到是这个原因
Dubbo优化后的SPI实现

基于Dubbo提供的SPI规范实现自己的扩展 在了解Dubbo的SPI机制之前,先通过一段代码初步了解Dubbo的实现方式,这样,我们就能够形成一个对比,得到这两种实现方式的差异

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/10/26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 关于JAVA 的SPI机制
  • SPI规范总结
  • SPI的缺点
    • Dubbo优化后的SPI实现
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档