Java SPI与API有何区别,如何准确区分?
- 内容介绍
- 文章标签
- 相关推荐
本文共计2083个文字,预计阅读时间需要9分钟。
最近新写了一个中间件,用于运行时动态日志等开关,其中使用Java SPI机制实现了自定义配置中心,保证了良好的扩展性。项目地址,走过路过可以点个star:[LogLe](https://github.com/saigu/LogLe)
最近新写了一个中间件「运行时动态日志等级开关」,其中使用Java SPI机制实现了自定义配置中心,保证良好的扩展性。
项目地址,走过路过可以点个star :)
github.com/saigu/LogLevelSwitch
在使用过程中,突然发现SPI其实和日常写API接口,然后进行implements实现非常相似,那SPI到底和普通API实现有啥区别呢?
带着这个问题,我们一起来梳理下SPI机制吧。
本文预计阅读时间10分钟,将围绕以下几点展开:
- 什么是 SPI 机制?
- SPI 实践案例
- SPI 和 API 有啥区别?
SPI(Service Provider Interface) 字面意思是服务提供者接口,本质上是一种「服务扩展机制」。
为什么需要这样一种「服务扩展机制」呢?
因为系统里抽象的各个模块,比如日志模块、xml解析模块、jdbc模块等,往往有很多不同的实现方案。
为了满足可拔插的原则,我们一般推荐模块之间基于接口编程,模块之间不对实现类进行硬编码。这就需要一种「服务扩展机制」,然后就有了SPI。
本文共计2083个文字,预计阅读时间需要9分钟。
最近新写了一个中间件,用于运行时动态日志等开关,其中使用Java SPI机制实现了自定义配置中心,保证了良好的扩展性。项目地址,走过路过可以点个star:[LogLe](https://github.com/saigu/LogLe)
最近新写了一个中间件「运行时动态日志等级开关」,其中使用Java SPI机制实现了自定义配置中心,保证良好的扩展性。
项目地址,走过路过可以点个star :)
github.com/saigu/LogLevelSwitch
在使用过程中,突然发现SPI其实和日常写API接口,然后进行implements实现非常相似,那SPI到底和普通API实现有啥区别呢?
带着这个问题,我们一起来梳理下SPI机制吧。
本文预计阅读时间10分钟,将围绕以下几点展开:
- 什么是 SPI 机制?
- SPI 实践案例
- SPI 和 API 有啥区别?
SPI(Service Provider Interface) 字面意思是服务提供者接口,本质上是一种「服务扩展机制」。
为什么需要这样一种「服务扩展机制」呢?
因为系统里抽象的各个模块,比如日志模块、xml解析模块、jdbc模块等,往往有很多不同的实现方案。
为了满足可拔插的原则,我们一般推荐模块之间基于接口编程,模块之间不对实现类进行硬编码。这就需要一种「服务扩展机制」,然后就有了SPI。

