面对分布式的开发,很多系统之间的调用都是使用rpc直接调用,但是有的时候上游的系统需要调用下游系统很多的接口,导致开发工作量很大。因此上游系统使用spi的方式在jar包中打一个spi接口,让下游的业务实现这个spi接口,上游的系统则可以通用的调用这一个接口就可以使用不同的功能。
下游业务方的实现:
一般我们需要设计如何实现spi接口,那实现的最简单的方式就是implements这个spi接口,这种实现方式不利用后续的扩展。
目前,在项目中,我使用注解+Spring容器启动的特性+面向接口+接口模版来实现。
比如我需要实现 上游接口
【SPI的使用场景】public interface SpiService{
public Result
}
下游的实现
public class SpiServiceImpl implements SpiService{
private SpiManager spiManager;
public Result
returnspiManager.handle(request);
}
}
public interface SpiManager{
public Result
}
public class SpiManagerImpl extends ApplicationObjectSupport implements SpiManager{
private Mapmap=new HashMapProcessSpi>();
protected void initApplicationContext(ApplicationContext context) throws BeansException {
super.initApplicationContext(context);
//设置不同的处理器,在spring容器启动之后,创建注解中key与具体实现的类映射
//map设值
}
public Result
//根据上游传的key获取相应的spiProcess类进行处理
}
}
public interfaceSpiProcess{
publicResultdoProcess(Requestrequest);
}
public interface SpiProcessTemplate{
public before(Requestrequest,Result
public process(Requestrequest,Result
public after(Requestrequest,Result
}
public abstractclassAbstractSpiProcess implements SpiProcess,SpiProcessTemplate{
public ResultdoProcess(Requestrequest){
Result result=new Result();
before( request,result);
process( request,result);
after( request,result);
return
result;
}
}
业务上具体实现类,extends AbstractSpiProcess就可以使用了。
最后将类配置到spring的文件中就ok
本文只是简单的说了一下 SPI的使用场景以及简单的实现。没有更具体的实现,需要根据不同的业务设计不同的实现框架
推荐阅读
- Java|Java基础——数组
- 人工智能|干货!人体姿态估计与运动预测
- java简介|Java是什么(Java能用来干什么?)
- Java|规范的打印日志
- Linux|109 个实用 shell 脚本
- 程序员|【高级Java架构师系统学习】毕业一年萌新的Java大厂面经,最新整理
- Spring注解驱动第十讲--@Autowired使用
- SqlServer|sql server的UPDLOCK、HOLDLOCK试验
- jvm|【JVM】JVM08(java内存模型解析[JMM])
- 技术|为参加2021年蓝桥杯Java软件开发大学B组细心整理常见基础知识、搜索和常用算法解析例题(持续更新...)