浅谈jdk-spi与dubbo-spi
浅谈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相关推荐
- 浅谈JDK、JRE、和JVM之间的关系
基本概念 JDK(Java Development Kit) 是 Java 语言的软件开发工具包(SDK).JDK不仅包括开发者需要的开发者环境,同时包括有程序运行所需要的支持环境JRE. JRE(J ...
- Dubbo SPI机制学习总结(持续更新...)
参考文章:Dubbo的SPI机制分析 首先来看看 Java SPI 的机制 Java SPI 起初是提供给厂商做插件开发用的,例如数据库驱动java.sql.Driver,市面上各种各样的数据库,不同 ...
- Dubbo SPI机制(上):一个普通的扩展类是如何加载的
这一篇我们先不讲Dubbo中的具体业务逻辑,我们来打基础,聊一聊Dubbo中的SPI机制. Dubbo SPI是干啥的 了解一个技术,得先知道它是为了解决什么问题而产生的.那么Dubbo SPI是干什 ...
- JDK、Spring、Dubbo SPI 原理介绍
导读: 需求变化是程序员生命中唯一不变的事情,本文将介绍 JDK/Spring/Dubbo 中的 SPI 机制,以此来帮助我们编写出一套可扩展性强,易于维护的代码框架. 文|杨亮 网易云商高级 Jav ...
- dubbo SPI是不是在炫技?
文章目录 简介 SPI的优势 SPI接口实现流程 SPI接口提供流程 dubbo与SPI 反思 简介 SPI全称Service Provider Interface,顾名思义,就是接口提供服务. 一般 ...
- Dubbo SPI机制和原理解析
简介 SPI(service provider interface)是一种服务发现机制,通过加载指定路径下配置文件中的实现类,达到运行时用实现动态替换接口的目的.SPI常常用于扩展应用的功能,Dubb ...
- JDK与JRE的关系和path的作用浅谈
JDK与JRE的关系和path的作用浅谈 摘要:JDK与JRE的关系以及path的配置对于初学者是要明白的问题,那么具体的JDK与JRE的关系是什么呢?那么本文讲给你简单介绍. 标签:JDK与JRE关 ...
- Dubbo源码分析系列-深入Dubbo SPI机制
导语 在之前的博客中介绍过关于Java中SPI的机制,也简单的分析了关于Java中SPI怎么去使用.SPI的全称Service Provider Interface,是一种服务发现机制.SPI的本 ...
- 【dubbo源码解析】 --- dubbo spi 机制(@SPI、@Adaptive)详解
本文对应源码地址:https://github.com/nieandsun/dubbo-study 注意:dubbo 要求SPI扩展点的实现类必须要有一个无参构造,除了Wrapper实现类之外 文章目 ...
最新文章
- 教你如何让电脑的ADSL宽带连接开机自动拨号
- 技术实践:大规模知识图谱预训练及电商应用
- centos yum install redis
- 前端八大灵感设计,代码变为现实
- Hive分析窗口函数(五) GROUPING SETS,GROUPING__ID,CUBE,ROLLUP
- Oracle存储过程中如何根据指定的参数判断该参数的值否存在数据表中:
- java怎么通过字段去获取对象_通过java反射获取任意对象的字段名及字段值
- 138. 复制带随机指针的链表
- 中日文字编码转换_全网最全面、全详细的编码、解码知识!!!
- python第三篇:python、flask关系映射
- C语言system的用法
- 【全志A64/R18】Android平台获取Chip ID
- HTML5小游戏程序案例--冰桶挑战h5案例
- Ubuntu20.04配置velodyne激光雷达环境
- IBL 漫反射辐照度
- 安卓 解析软件包时出现问题
- 由《成为乔布斯》联想而来
- Flink实战(九十三):数据倾斜(二)keyby 窗口数据倾斜的优化
- 用Python爬取淘宝商品
- 微信小程序毕业设计 基于微信校园失物招领小程序系统开题报告
热门文章
- 操作系统实验报告 实验1 VMware虚拟机配置与linux基本命令(答案全)
- index、noindex、follow、nofollow的使用说明
- HC32460时钟配置
- Windows6.1-KB2661332-x64 远程桌面服务当前正忙,因此无法完成您尝试执行的任务
- 安科瑞预付费管理系统如何在高校学生公寓应用?及现场硬件如何选型?
- 全域、全要素、全过程的数字化国土空间治理之道
- 用mysql触发器做数据统计
- error日志显示不全的问题,-XX:-OmitStackTraceInFastThrow
- 万历十五年 . 读书笔记
- 上传项目到开源中国码云