您好!
欢迎来到京东云开发者社区
登录
首页
博文
课程
大赛
工具
用户中心
开源
首页
博文
课程
大赛
工具
开源
更多
用户中心
开发者社区
>
博文
>
Java - SPI机制
分享
打开微信扫码分享
点击前往QQ分享
点击前往微博分享
点击复制链接
Java - SPI机制
fl****
2023-08-10
IP归属:北京
5360浏览
## SPI是什么 SPI全称Service Provider Interface,是Java提供的一套用来被第三方实现或者扩展的API,它可以用来启用框架扩展和替换组件。 整体机制如下图 ![image.png](https://s3.cn-north-1.jdcloud-oss.com/shendengbucket1/2023-01-06-16-12vHIDUxbtyTb1Doq.png) Java SPI 实际上是“基于接口的编程+策略模式+配置文件”组合实现的动态加载机制。 ## 使用场景 适用于:调用者根据实际使用需要,启用、扩展、或者替换框架的实现策略 比较常见的例子: * 数据库驱动加载接口实现类的加载,JDBC加载不同类型数据库的驱动 * 日志门面接口实现类加载,SLF4J加载不同提供商的日志实现类 * Spring中大量使用了SPI,比如:对servlet3.0规范对ServletContainerInitializer的实现、自动类型转换Type Conversion SPI(Converter SPI、Formatter SPI)等 * Dubbo中也大量使用SPI的方式实现框架的扩展, 不过它对Java提供的原生SPI做了封装,允许用户扩展实现Filter接口 ## 使用介绍 要使用Java SPI,需要遵循如下约定: * 当服务提供者提供了接口的一种具体实现后,在jar包的META-INF/services目录下创建一个以“接口全限定名”为命名的文件,内容为实现类的全限定名; * 接口实现类所在的jar包放在主程序的classpath中; * 主程序通过java.util.ServiceLoder动态装载实现模块,它通过扫描META-INF/services目录下的配置文件找到实现类的全限定名,把类加载到JVM; * SPI的实现类必须携带一个不带参数的构造方法; ## 总结 * 优点:使用Java SPI机制的优势是实现解耦,使得第三方服务模块的装配控制的逻辑与调用者的业务代码分离,而不是耦合在一起。应用程序可以根据实际业务情况启用框架扩展或替换框架组件。 * 缺点: 1. 虽然ServiceLoader也算是使用的延迟加载,但是基本只能通过遍历全部获取,也就是接口的实现类全部加载并实例化一遍。如果你并不想用某些实现类,它也被加载并实例化了,这就造成了浪费。获取某个实现类的方式不够灵活,只能通过Iterator形式获取,不能根据某个参数来获取对应的实现类。 2. 多个并发多线程使用ServiceLoader类的实例是不安全的。
上一篇:Redis - 热点key
下一篇:MySQL 执行计划详解
fl****
文章数
10
阅读量
2879
作者其他文章
01
千万级数据深分页查询SQL性能优化实践
一、系统介绍和问题描述 如何在Mysql中实现上亿数据的遍历查询?先来介绍一下系统主角:关注系统,主要是维护京东用户和业务对象之前的关注关系;并对外提供各种关系查询,比如查询用户的关注商品或店铺列表,查询用户是否关注了某个商品或店铺等。但是最近接到了一个新需求,要求提供查询关注对象的粉丝列表接口功能。该功能的难点就是关注对象的粉丝数量过多,不少店铺的粉丝数量都是千万级别,并且有些大V
01
ElasticSearch - 批量更新bulk死锁问题排查
一、问题系统介绍1. 监听商品变更MQ消息,查询商品最新的信息,调用BulkProcessor批量更新ES集群中的商品字段信息;2. 由于商品数据非常多,所以将商品数据存储到ES集群上,整个ES集群共划分了256个分片,并根据商品的三级类目ID进行分片路由。比如一个SKU的商品名称发生变化,我们就会收到这个SKU的变更MQ消息,然后再去查询商品接口,将商品的最新名称查询回来,再根据这个SKU的三级
01
京东统一头尾管理系统探索实践
系统背景 问:修改一个网站的文案需要多久?对于一个小型个人网站来说,估计很简单,几分钟就能修改完成并发布。但如果说要修改的是上百个网站的文案呢?那估计就得需要产品提需求,研发排期开发,测试进行回归验证。由于涉及的应用众多,而每个应用都有自己的研发需求,可能无法快速排期进行文案修改。所以看似一个非常简单的需求,涉及到的应用和部门比较多的时候,也就成了产品经理的恶梦。尤其是像京东商城这样
01
百亿规模京东实时浏览记录系统的设计与实现
1. 系统介绍浏览记录系统主要用来记录京东用户的实时浏览记录,并提供实时查询浏览数据的功能。在线用户访问一次商品详情页,浏览记录系统就会记录用户的一条浏览数据,并针对该浏览数据进行商品维度去重等一系列处理并存储。然后用户可以通过我的京东或其他入口查询用户的实时浏览商品记录,实时性可以达到毫秒级。目前本系统可以为京东每个用户提供最近200条的浏览记录查询展示。2. 系统设计与实现2.1 系统整体架构
fl****
文章数
10
阅读量
2879
作者其他文章
01
千万级数据深分页查询SQL性能优化实践
01
ElasticSearch - 批量更新bulk死锁问题排查
01
京东统一头尾管理系统探索实践
01
百亿规模京东实时浏览记录系统的设计与实现
添加企业微信
获取1V1专业服务
扫码关注
京东云开发者公众号