分享 vivo 互联网技术干货与沙龙活动,推荐最新行业动态与热门会议。
分类: Java
2020-12-16 10:48:28
通过本文的学习,可以了解 Dubbo SPI 的特性及实现原理,希望对大家的开发设计有一定的启发性。
SPI 全称为 Service Provider Interface,是一种模块间组件相互引用的机制。其方案通常是提供方将接口实现类的全名配置在classPath下的指定文件中,由调用方读取并加载。这样需要替换某个组件时,只需要引入新的JAR包并在其中包含新的实现类和配置文件即可,调用方的代码无需任何调整。优秀的SPI框架能够提供单接口多实现类时的优先级选择,由用户指定选择哪个实现。
得益于这些能力,SPI对模块间的可插拔机制和动态扩展提供了非常好的支撑。
本文将简单介绍JDK自带的SPI,分析SPI和双亲委派的关系,进而重点分析DUBBO的SPI机制;比较两者有何不同,DUBBO的SPI带来了哪些额外的能力。
提供者在classPath或者jar包的META-INF/services/目录创建以服务接口命名的文件,调用者通过java.util.ServiceLoader加载文件内容中指定的实现类。
search示例接口
package com.example.studydemo.spi;
public interface Search {
void search();
}
|
文件搜索实现类
1
2
3
4
5
6
7
|
package com.example.studydemo.spi;
public class FileSearchImpl implements Search {
@Override
public void search() {
System.out.println("文件搜索");
}
}
|
数据库搜索实现类
1
2
3
4
5
6
7
|
package com.example.studydemo.spi;
public class DataBaseSearchImpl implements Search {
@Override
public void search() {
System.out.println("数据库搜索");
}
}
|