Java SPI机制

一、定义

SPI:Service Provider Interface
服务提供者接口
他是由第一方系统提供给第三方服务提供者的服务接口,是对不同的第三方实现方案的规范和约定,能够让同一组件不同实现达到可拔插的效果,让不同组件协调工作。
谁提供SPI接口通常没有限制,往往是开发的软件可支持扩展时,就可以制定SPI接口。

二、具体操作

1、Java SPI规范
服务提供者需在jar包的META-INF/services/目录下创建一个以SPI定义的接口名为文件名的文件,文件内容为SPI接口实现类的全类名。
以mysql驱动为例:

文件内容为:

其中java.sql.Driver为Java定义的数据库驱动SPI接口,com.mysql.cj.jdbc.Driver是第三方服务提供者(Mysql)提供的具体实现。
2、Java SPI实现
Java关于SPI实现的源码在这个类中:
java.util.ServiceLoader
具体逻辑可自行阅读

三、实际案例

1、JDBC加载不同数据库厂商的连接驱动
2、SLF4J提供的对不同日志实现(log4j、logback)的支持
3、Spring为了支持扩展大量使用了SPI,如:对servlet3.0规范对ServletContainerInitializer的实现、自动类型转换Type Conversion SPI(Converter SPI、Formatter SPI)等
4、Dubbo中也大量使用SPI的方式实现框架的扩展, 不过它对java提供的原生SPI做了封装

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值