Common Extension Points And SPI List
I. SPI Mechanism
(Ⅰ) Pamirs SPI Framework
Integrates three service discovery mechanisms to support dynamic component extension:
- Annotation Rules:
- Interfaces specify default extension names (default is "pamirs") and loading factories via
@SPI - Implementation classes set extension names via
@SPI.Service(Spring SPI uses default Bean names, Java SPI uses full class names) @Order/@Prioritydefines extension priority
- Interfaces specify default extension names (default is "pamirs") and loading factories via
(Ⅱ) Configuration Methods
1. Java SPI
- Interface:
public interface DemoApi { List<String> demo(); } - Implementation:
@Order(10) public class DemoApiImpl implements DemoApi { ... } - Configuration file: Write implementation class full path in
META-INF/services/interface full class name
2. Annotation SPI
- Interface:
@SPI("ext1") public interface DemoApi { ... } - Implementation:
@SPI.Service("ext1") @Order(10) public class DemoApiImpl implements DemoApi { ... }
3. Spring SPI
- Implementation:
@Component("ext1") @Order(10) public class DemoApiImpl implements DemoApi { ... }
4. Invocation Methods
// Invoke by specifying extension name
DemoApi ext = ExtensionServiceLoader.getExtension(DemoApi.class, "ext1");
// Get ordered list by priority
List<DemoApi> spis = ExtensionServiceLoader.getExtensionLoader(DemoApi.class).getOrderedExtensions();
// Shortcut (Spider utility class)
DemoApi ext = Spider.getExtension(DemoApi.class, "ext1");II. System Extension Points
(Ⅰ) Framework Layer
| Extension Point | Implementation Location | SPI | Interface |
|---|---|---|---|
| Spring Type Converter | * | No | SpringTypeConverterRegister #register |
| SPI Loader Factory | * | Yes | ServiceLoaderFactory |
| SPI Path Setting | * | Yes | SpiClassPathApi |
(Ⅱ) Metadata Scanning
| Extension Point | Implementation Location | SPI | Interface |
|---|---|---|---|
| Metadata Annotation Converter | * | No | ModelConverter |
| Metadata Model Signer | * | No | ModelSigner |
| Metadata Annotation Converter Whitelist | yaml:pamirs.configure.converter.annotation | No | ModelConverter interface implementation class name |
| Metadata Model Signer Whitelist | yaml:pamirs.configure.signer | No | ModelSigner interface implementation class name |
| Scan path configuration for meta models processed by annotation converters | yaml:pamirs.meta.meta-packages | No | Default: pro.shushi.pamirs.meta.domain pro.shushi.pamirs.boot.base.model |
(Ⅲ) Metadata Calculation
| Extension Point | Implementation Location | SPI | Interface |
|---|---|---|---|
| Model Encoding Interface | * | Yes | ModelModelApi |
| Model Calculation Interface | * | Yes | ModelComputeApi |
| Model Validation Interface | * | Yes | ModelCheckApi |
| Model Directive Interface | * | Yes | ModelDirectiveBatchApi |
| ORM Conversion Interface | * | Yes | OrmApi |
| Type System Interface | * | Yes | TypeProcessor |
| Inheritance Processing Extension Logic | * | Yes | InheritedExtendProcessor |
| Model Calculation Extension Logic | * | Yes | ModelExtendComputer |
| Field Calculation Extension Logic | * | Yes | FieldExtendComputer |
| Metadata Calculation Extension Logic | * | Yes | MetaDataExtendComputer |
(Ⅳ) API Layer
| Extension Point | Implementation Location | SPI | Interface |
|---|---|---|---|
| Request Context Extension | * | Yes | SessionPrepareApi |
| Interceptor Construction Extension | * | Yes | InstrumentationApi |
| Action Binding Extension | * | Yes | ActionBinderApi |
| Data Loader Registration Extension | * | Yes | DataLoaderRegistryApi |
(Ⅴ) FaaS Layer
| Extension Point | Implementation Location | SPI | Interface |
|---|---|---|---|
| Assemble Expression Context | * | Yes | SessionContextApi |
| Business Function Extension | * | Yes | BusinessFunctionsApi |
| Context Function Extension | * | Yes | ContextFunctionsApi |
| Allowed/Blocked List for Executable Functions in Expressions | * | Yes | FaasScriptAllowListApi |
(Ⅵ) ORM Layer
| Extension Point | Implementation Location | SPI | Interface |
|---|---|---|---|
| Front-end Field Processing Extension Logic | * | Yes | FrontEndFieldExtendConverter |
| Front-end Field Calculation | * | No | FieldValueComputer |
| Back-end Field Processing Extension Logic | * | Yes | BackEndFieldExtendConverter |
| Field Serialization API | * | No | Serializer |
(Ⅶ) Persistence Layer
| Extension Point | Implementation Location | SPI | Interface |
|---|---|---|---|
| Data Source Routing | pamirs-boot-* yaml:pamirs.mapper.data-source-route-service | Yes | DataSourceRouteService#route |
| Unified Key Prefix Service for Data Frameworks | * | Yes | DataApiKeyService |
| Custom Parameters for Dynamic Data Source Routing | pamirs-boot-* yaml:pamirs.mapper.dynamic-ds-key-computer | Yes | DynamicDsKeyComputer |
| Custom Parameters for Data Table Name Calculation | pamirs-boot-* yaml:pamirs.mapper.table-name-computer | Yes | TableNameComputer#context |
| Fetch Logic Field Definitions | pamirs-connectors-data-* **yaml:pamirs.mapper.**logic-column-fetcher | Yes | LogicColumnFetcher #fetchLogicColumnDefinitions |
| Fetch Logic Fields | pamirs-connectors-data-* **yaml:pamirs.mapper.**logic-column-fetcher | Yes | LogicColumnFetcher #fetchLogicColumns |
| Universal Mapper | * | No | PamirsMapper |