Plugin API 参考

大多数 AuraBoot 插件都是纯配置(JSON DSL)。当配置不足以满足需求时,Plugin API 暴露两类接入面:

  • SPI —— 你需要 实现(用 @Extension 标注)的扩展点,用于把行为注入到平台的 pipeline。
  • Service —— 你需要 注入(@Autowired)的宿主托管 bean,用于调用平台能力。

发现机制基于 PF4J(classloader 隔离、生命周期、扩展索引)叠加在 Spring 之上(DI、事务)。插件通过 plugin.json + META-INF/extensions.idx 被发现,并由 Plugin Marketplace 管理。

生命周期

每个插件都可以在 AuraPlugin 上实现以下四个生命周期回调:

public class MyPlugin extends AuraPlugin {
    public MyPlugin(PluginWrapper wrapper) { super(wrapper); }

    @Override public String getNamespace() { return "my-plugin"; }

    @Override protected void doInstall(PluginInstallContext context)     { /* 一次性初始化 */ }
    @Override protected void doEnable(PluginEnableContext context)       { /* 注册、启动 worker */ }
    @Override protected void doDisable(PluginDisableContext context)     { /* 反注册、停止 worker */ }
    @Override protected void doUninstall(PluginUninstallContext context) { /* 清理持久化状态 */ }
}

每个生命周期回调接收对应的专用上下文类型(PluginInstallContext / PluginEnableContext / PluginDisableContext / PluginUninstallContext),它们都继承自 PluginContextPluginContext 暴露 getTenantId()getPluginId()getNamespace()getVersion()getSettings() 以及 getSetting(key) / getSetting(key, defaultValue)。需要宿主 Service 时通过 Spring @Autowired 注入(见下文)。

SPI(扩展点)

SPI用途
CommandHandlerExtension在 Command Pipeline 的 preExecute / postExecute / onError 阶段挂钩。
EventListenerExtension订阅 outbox 发布的领域事件(at-least-once)。
DataProviderExtension向 Page Block、dashboard、报表提供动态数据源。
ValidatorExtension超出 DSL 约束的字段级 / 跨字段校验。
MenuProviderExtension由插件动态提供菜单项。
RestEndpointExtension由插件注册自定义 REST 路由。

Service(宿主 bean)

Service用途
MetaModelService读取 overlay 合并后的 model / field / page / command 元数据。
DataAccessormt_<modelCode> 表执行带 tenant 隔离的参数化 CRUD。
ConversationTurnService所有 chat / agent / ACP 回合必须经过的唯一 chokepoint。
CommandExecutorCommand Pipeline 的编程式入口。

Spring bean 注入

所有 @Extension 类都由 Spring 管理;通过 @Autowired 注入任意宿主 Service。对可选 accessor(如 FileAccessorAiProviderAccessorKnowledgeBaseAccessor)使用 @Autowired(required = false),以便插件在 OSS 与企业版平台上都可运行。

发布到 Marketplace

  1. 校验 —— aura plugin validate plugins/my-plugin
  2. 打包 —— CLI 会打包 JSON 资源和编译产物
  3. 发布 —— 上传到 Marketplace 或以 zip 形式分发
  4. 安装 —— 其他租户通过 Marketplace UI 或 aura plugin publish 安装

Marketplace 元数据位于 plugin.jsonmarketplace 节点:

{
  "marketplace": {
    "category": "CRM",
    "tags": ["sales", "lead-management"],
    "screenshots": ["screenshot-1.png", "screenshot-2.png"],
    "pricing": "free",
    "supportUrl": "https://github.com/yourorg/my-plugin/issues"
  }
}

下一步