通用扩展点与平台SPI清单(Common Extension Points And SPI List)
一、SPI 机制
(一)Pamirs SPI 框架
整合三种服务发现机制,支持组件动态扩展:
- 注解规则:
- 接口通过
@SPI指定默认扩展名(默认为 "pamirs")和加载工厂 - 实现类通过
@SPI.Service设置扩展名(Spring SPI 默认 Bean 名称,Java SPI 为全类名) @Order/@Priority定义扩展优先级
- 接口通过
(二)配置方式
1、Java SPI
- 接口:
public interface DemoApi { List<String> demo(); } - 实现类:
@Order(10) public class DemoApiImpl implements DemoApi { ... } - 配置文件:
META-INF/services/接口全类名写入实现类全路径
2、Annotation SPI
- 接口:
@SPI("ext1") public interface DemoApi { ... } - 实现类:
@SPI.Service("ext1") @Order(10) public class DemoApiImpl implements DemoApi { ... }
3、Spring SPI
- 实现类:
@Component("ext1") @Order(10) public class DemoApiImpl implements DemoApi { ... }
4、调用方式
// 指定扩展名调用
DemoApi ext = ExtensionServiceLoader.getExtension(DemoApi.class, "ext1");
// 按优先级获取列表
List<DemoApi> spis = ExtensionServiceLoader.getExtensionLoader(DemoApi.class).getOrderedExtensions();
// 快捷方式(Spider工具类)
DemoApi ext = Spider.getExtension(DemoApi.class, "ext1");二、系统扩展点
(一)框架层
| 扩展点 | 实现位置 | SPI | 接口 |
|---|---|---|---|
| Spring类型转换器 | * | 否 | SpringTypeConverterRegister #register |
| SPI加载器工厂 | * | 是 | ServiceLoaderFactory |
| SPI路径设置 | * | 是 | SpiClassPathApi |
(二)元数据扫描
| 扩展点 | 实现位置 | SPI | 接口 |
|---|---|---|---|
| 元数据注解转换器 | * | 否 | ModelConverter |
| 元数据模型签名器 | * | 否 | ModelSigner |
| 元数据注解转换器白名单 | yaml:pamirs.configure.converter.annotation | 否 | ModelConverter接口实现类名 |
| 元数据模型签名器白名单 | yaml:pamirs.configure.signer | 否 | ModelSigner接口实现类名 |
| 注解转化器处理的元模型的扫描路径配置 | yaml:pamirs.meta.meta-packages | 否 | 默认: pro.shushi.pamirs.meta.domain pro.shushi.pamirs.boot.base.model |
(三)元数据计算
| 扩展点 | 实现位置 | SPI | 接口 |
|---|---|---|---|
| 模型编码接口 | * | 是 | ModelModelApi |
| 模型运算接口 | * | 是 | ModelComputeApi |
| 模型校验接口 | * | 是 | ModelCheckApi |
| 模型指令接口 | * | 是 | ModelDirectiveBatchApi |
| ORM转换接口 | * | 是 | OrmApi |
| 类型系统接口 | * | 是 | TypeProcessor |
| 继承处理扩展逻辑 | * | 是 | InheritedExtendProcessor |
| 模型计算扩展逻辑 | * | 是 | ModelExtendComputer |
| 字段计算扩展逻辑 | * | 是 | FieldExtendComputer |
| 元数据计算扩展逻辑 | * | 是 | MetaDataExtendComputer |
(四)API层
| 扩展点 | 实现位置 | SPI | 接口 |
|---|---|---|---|
| 请求上下文扩展点 | * | 是 | SessionPrepareApi |
| 拦截器构建扩展点 | * | 是 | InstrumentationApi |
| 动作绑定扩展点 | * | 是 | ActionBinderApi |
| 数据加载器注册扩展点 | * | 是 | DataLoaderRegistryApi |
(五)FaaS层
| 扩展点 | 实现位置 | SPI | 接口 |
|---|---|---|---|
| 组装表达式上下文 | * | 是 | SessionContextApi |
| 商业函数扩展点 | * | 是 | BusinessFunctionsApi |
| 上下文函数扩展点 | * | 是 | ContextFunctionsApi |
| 表达式可执行函数黑白名单 | * | 是 | FaasScriptAllowListApi |
(六)ORM层
| 扩展点 | 实现位置 | SPI | 接口 |
|---|---|---|---|
| 前端字段处理扩展逻辑 | * | 是 | FrontEndFieldExtendConverter |
| 前端字段计算 | * | 否 | FieldValueComputer |
| 后端字段处理扩展逻辑 | * | 是 | BackEndFieldExtendConverter |
| 字段序列化api | * | 否 | Serializer |
(七)持久层
| 扩展点 | 实现位置 | SPI | 接口 |
|---|---|---|---|
| 数据源路由 | pamirs-boot-* yaml:pamirs.mapper.data-source-route-service | 是 | DataSourceRouteService#route |
| 数据框架的统一key前缀服务 | * | 是 | DataApiKeyService |
| 动态数据源路由自定义参数 | pamirs-boot-* yaml:pamirs.mapper.dynamic-ds-key-computer | 是 | DynamicDsKeyComputer |
| 数据表名计算自定义参数 | pamirs-boot-* yaml:pamirs.mapper.table-name-computer | 是 | TableNameComputer#context |
| 获取逻辑字段定义 | pamirs-connectors-data-* **yaml:pamirs.mapper.**logic-column-fetcher | 是 | LogicColumnFetcher #fetchLogicColumnDefinitions |
| 获取逻辑字段 | pamirs-connectors-data-* **yaml:pamirs.mapper.**logic-column-fetcher | 是 | LogicColumnFetcher #fetchLogicColumns |
| 通用mapper | * | 否 | PamirsMapper |