浅谈jdk-spi与dubbo-spi

  • 关于SPI:
  • 1. jdk-spi示例:
  • 2. dubbo-spi示例:

关于SPI:

关于SPI的概念,此处不再过多撰述,一句话:接口的实现的发现机制

我们直接来看两个案例

1. jdk-spi示例:

定义一个接口:Animal

public interface Animal {void say();
}

定义两个实现类

public class Cat implements Animal {@Overridepublic void say() {System.out.println("小猫");}
}public class Dog implements Animal {@Overridepublic void say() {System.out.println("小狗");}
}

resource/META-INF/services 下创建一个文件:com.kl.dubbotest.jdkspi.Animal,内容如下

com.kl.dubbotest.jdkspi.Dog
com.kl.dubbotest.jdkspi.Cat

编写test

public class SpiTest {public static void main(String[] args) {ServiceLoader<Animal> serviceLoader = ServiceLoader.load(Animal.class);for (Animal animal: serviceLoader){animal.say();}}
}

测试结果,如下:

2. dubbo-spi示例:

dubbo-spi必须要在扩展接口上加@SPI注解,所以Animal接口需要加上

resource/META-INF/dubbo 下创建一个文件:com.kl.dubbotest.dubbospi.Animal,内容如下

dog = com.kl.dubbotest.dubbospi.Dog
cat = com.kl.dubbotest.dubbospi.Cat

编写test

@Test
public void animalSpi() {ExtensionLoader<Animal> extensionLoader = ExtensionLoader.getExtensionLoader(Animal.class);Animal animal = extensionLoader.getExtension("cat");animal.say();animal = extensionLoader.getExtension("dog");animal.say();
}

测试结果,如下:

3. jdk-spi优缺点分析

优点:
扩展功能实现了解耦

缺点:
(1)浪费:将接口的实现类全部加载并实例化一遍,不想用某些实现类,它也被加载并实例化了,
(2)不灵活:不能获取指定的实现类,只能通过Iterator形式获取
(3)线程不安全:多线程使用ServiceLoader类的实例是不安全的

所以:dubbo说要自己干一套出来

浅谈jdk-spi与dubbo-spi相关推荐

  1. 浅谈JDK、JRE、和JVM之间的关系

    基本概念 JDK(Java Development Kit) 是 Java 语言的软件开发工具包(SDK).JDK不仅包括开发者需要的开发者环境,同时包括有程序运行所需要的支持环境JRE. JRE(J ...

  2. Dubbo SPI机制学习总结(持续更新...)

    参考文章:Dubbo的SPI机制分析 首先来看看 Java SPI 的机制 Java SPI 起初是提供给厂商做插件开发用的,例如数据库驱动java.sql.Driver,市面上各种各样的数据库,不同 ...

  3. Dubbo SPI机制(上):一个普通的扩展类是如何加载的

    这一篇我们先不讲Dubbo中的具体业务逻辑,我们来打基础,聊一聊Dubbo中的SPI机制. Dubbo SPI是干啥的 了解一个技术,得先知道它是为了解决什么问题而产生的.那么Dubbo SPI是干什 ...

  4. JDK、Spring、Dubbo SPI 原理介绍

    导读: 需求变化是程序员生命中唯一不变的事情,本文将介绍 JDK/Spring/Dubbo 中的 SPI 机制,以此来帮助我们编写出一套可扩展性强,易于维护的代码框架. 文|杨亮 网易云商高级 Jav ...

  5. dubbo SPI是不是在炫技?

    文章目录 简介 SPI的优势 SPI接口实现流程 SPI接口提供流程 dubbo与SPI 反思 简介 SPI全称Service Provider Interface,顾名思义,就是接口提供服务. 一般 ...

  6. Dubbo SPI机制和原理解析

    简介 SPI(service provider interface)是一种服务发现机制,通过加载指定路径下配置文件中的实现类,达到运行时用实现动态替换接口的目的.SPI常常用于扩展应用的功能,Dubb ...

  7. JDK与JRE的关系和path的作用浅谈

    JDK与JRE的关系和path的作用浅谈 摘要:JDK与JRE的关系以及path的配置对于初学者是要明白的问题,那么具体的JDK与JRE的关系是什么呢?那么本文讲给你简单介绍. 标签:JDK与JRE关 ...

  8. Dubbo源码分析系列-深入Dubbo SPI机制

    导语   在之前的博客中介绍过关于Java中SPI的机制,也简单的分析了关于Java中SPI怎么去使用.SPI的全称Service Provider Interface,是一种服务发现机制.SPI的本 ...

  9. 【dubbo源码解析】 --- dubbo spi 机制(@SPI、@Adaptive)详解

    本文对应源码地址:https://github.com/nieandsun/dubbo-study 注意:dubbo 要求SPI扩展点的实现类必须要有一个无参构造,除了Wrapper实现类之外 文章目 ...

最新文章

  1. 教你如何让电脑的ADSL宽带连接开机自动拨号
  2. 技术实践:大规模知识图谱预训练及电商应用
  3. centos yum install redis
  4. 前端八大灵感设计,代码变为现实
  5. Hive分析窗口函数(五) GROUPING SETS,GROUPING__ID,CUBE,ROLLUP
  6. Oracle存储过程中如何根据指定的参数判断该参数的值否存在数据表中:
  7. java怎么通过字段去获取对象_通过java反射获取任意对象的字段名及字段值
  8. 138. 复制带随机指针的链表
  9. 中日文字编码转换_全网最全面、全详细的编码、解码知识!!!
  10. python第三篇:python、flask关系映射
  11. C语言system的用法
  12. 【全志A64/R18】Android平台获取Chip ID
  13. HTML5小游戏程序案例--冰桶挑战h5案例
  14. Ubuntu20.04配置velodyne激光雷达环境
  15. IBL 漫反射辐照度
  16. 安卓 解析软件包时出现问题
  17. 由《成为乔布斯》联想而来
  18. Flink实战(九十三):数据倾斜(二)keyby 窗口数据倾斜的优化
  19. 用Python爬取淘宝商品
  20. 微信小程序毕业设计 基于微信校园失物招领小程序系统开题报告

热门文章

  1. 操作系统实验报告 实验1 VMware虚拟机配置与linux基本命令(答案全)
  2. index、noindex、follow、nofollow的使用说明
  3. HC32460时钟配置
  4. Windows6.1-KB2661332-x64 远程桌面服务当前正忙,因此无法完成您尝试执行的任务
  5. 安科瑞预付费管理系统如何在高校学生公寓应用?及现场硬件如何选型?
  6. 全域、全要素、全过程的数字化国土空间治理之道
  7. 用mysql触发器做数据统计
  8. error日志显示不全的问题,-XX:-OmitStackTraceInFastThrow
  9. 万历十五年 . 读书笔记
  10. 上传项目到开源中国码云