Skip to main content

SPI及EP使用

1. SPI的概念

SPI: 指在开发平台定义的构件方法,且可公开给业务配置阶段设置入参的对外接口,SPI下可新增扩展点。(Service Provider Interface 服务提供者接口,是一种服务发现机制,这一机制为程序的扩展提供了可能。)

扩展点(EP):本构件提供接口(本身不实现),由外部扩展实现,只定义方法输入和方法输出。(接口的抽象方法)

扩展点实现(Impl):对扩展点(本构件或者引用构件)的具体实现,即可在其中配置规则链。(抽象方法的实现)

简单理解

一个接口(SPI)可以有任意多个扩展点(EP),一个扩展点(EP)可以有任意多种实现(Imp)

例如:老师布置作业(SPI,作业(接口)是抽象的概念) 有多个题目:加法、乘法(扩展点EP) 及 要求(方法输入和方法输出),每个学生有不同的实现(Imp)。

img

注:若调用方和实现方处于同一上下文环境中,那么调用方调用SPI时,将执行实现方的扩展点实现。

多态的概念

多态是同一个行为具有多个不同表现形式或形态的能力。

多态就是同一个接口,使用不同的实例而执行不同操作,如图所示:

img

多态的优点
  • 消除程序之间的耦合关系
  • 可替换性
  • 可扩充性
  • 接口性
  • 灵活性
  • 简化性

2. SPI的实现步骤

img

注意

如果SPI接口定义的是服务端方法,只能在构件方法中,创建扩展点实现;

在窗体方法的扩展点实现中,选不到定义的服务端SPI接口。

3. 场景:跨窗体实现表单的维护功能

案例下载

在构件方法中定义SPI方法(客户端方法),创建扩展点EP,通过跨窗体实现表单的维护功能。

(1)在 子窗体A 实现EP:获取业务表数据,配置新增按钮,以及配置扩展点实现保存;

(2)在 主窗体B 调用SPI:添加一个窗体容器加载子窗体A,主窗体执行SPI,实现子窗体A数据保存。