SPI的使用场景
来源:互联网 发布:lol国服mac版本几时出 编辑:程序博客网 时间:2024/06/06 03:08
面对分布式的开发,很多系统之间的调用都是使用rpc直接调用,但是有的时候上游的系统需要调用下游系统很多的接口,导致开发工作量很大。因此上游系统使用spi的方式在jar包中打一个spi接口,让下游的业务实现这个spi接口,上游的系统则可以通用的调用这一个接口就可以使用不同的功能。
下游业务方的实现:
一般我们需要设计如何实现spi接口,那实现的最简单的方式就是implements这个spi接口,这种实现方式不利用后续的扩展。
目前,在项目中,我使用注解+Spring容器启动的特性+面向接口+接口模版来实现。
比如我需要实现 上游接口
public interface SpiService{
public Result<T> process(Request request);
}
下游的实现
public class SpiServiceImpl implements SpiService{
private SpiManager spiManager;
public Result<T> process(Request request){
return spiManager.handle(request);
}
}
public interface SpiManager{
public Result<T> handle(Request request);
}
public class SpiManagerImpl extends ApplicationObjectSupport implements SpiManager{
private Map<String ,ProcessSpi> map=new HashMap<String,ProcessSpi>();
protected void initApplicationContext(ApplicationContext context) throws BeansException { super.initApplicationContext(context);
//设置不同的处理器,在spring容器启动之后,创建注解中key与具体实现的类映射
// map设值
}
public Result<T> handle(Request request){
//根据上游传的key获取相应的spiProcess类进行处理
}
}
public interface SpiProcess{
public Result doProcess(Request request);
}
public interface SpiProcessTemplate{
public before(Request request,Result<T> result);
public process(Request request,Result<T> result);
public after(Request request,Result<T> result);
}
public abstract class AbstractSpiProcess implements SpiProcess,SpiProcessTemplate{
public Result doProcess(Request request){
Result result=new Result();
before( request, result);
process( request, result);
after( request, result);
return result; }
}
业务上具体实现类,extends AbstractSpiProcess 就可以使用了。
最后将类配置到spring的文件中就ok
本文只是简单的说了一下 SPI的使用场景以及简单的实现。没有更具体的实现,需要根据不同的业务设计不同的实现框架
- SPI的使用场景
- SPI DMA 的使用
- LPC2478的SPI使用
- DSP28335 SPI的使用
- 使用Beaglebone Black的SPI
- 使用Beaglebone Black的SPI
- STM32 SPI DMA 的使用
- cubieboard 之SPI的使用
- STM32之SPI的使用
- STM32 SPI DMA 的使用
- STM32 SPI DMA 的使用
- Android中SPI的使用
- Android中SPI的使用
- STM32的SPI使用注意
- STM32值SPI的使用及SPI初始化注意事项
- stm8s开发(七) SPI的使用:SPI主机通信!
- SQLite的使用场景
- SQLite的使用场景
- python之数据驱动DDT安装
- 剑指offer---平衡二叉树
- CSS——水平(横向滚动条)
- 【深入理解计算机系统】系统级I/O
- 欢迎使用CSDN-markdown编辑器
- SPI的使用场景
- 运用字符串中位置的调换,比较一个旋转与另一个字符串是否相同。上篇博客的拓展。
- 1、安装与卸载
- Unity打包发布设置Bundle Identifier
- ionic3开发系列——ionic3懒加载配置
- 设计模式从零开始——工厂方法模式
- jQuery 遍历
- cnn
- 洛谷P1355 神秘大三角