Skip to content

Forge SPI 扩展点索引

Forge 通过 SPI 机制提供预定义扩展点,业务模块实现接口即可扩展系统能力。

SPI 总览

SPI 接口模块扩展能力
FileStorageSPIforge-starter-file自定义文件存储方式
MessageChannelSPIforge-plugin-message自定义消息推送渠道
SocialLoginSPIforge-starter-social自定义社交登录平台
EnterpriseCollaborationSPIforge-starter-core自定义企业协同平台

FileStorageSPI

扩展文件存储方式,当前已实现:本地存储、阿里云 OSS、RustFS。

接口定义

java
public interface FileStorageSPI {

    /**
     * 上传文件
     */
    String upload(InputStream inputStream, String fileName, String contentType);

    /**
     * 下载文件
     */
    InputStream download(String fileId);

    /**
     * 删除文件
     */
    void delete(String fileId);

    /**
     * 获取文件访问 URL
     */
    String getUrl(String fileId);

    /**
     * 存储类型标识
     */
    String getType();
}

自定义实现示例(MinIO)

java
@Component
@ConditionalOnProperty(prefix = "forge.file", name = "type", havingValue = "minio")
public class MinioFileStorage implements FileStorageSPI {

    @Override
    public String upload(InputStream inputStream, String fileName, String contentType) {
        // MinIO 上传实现
    }

    @Override
    public String getType() {
        return "minio";
    }

    // 其他方法...
}

MessageChannelSPI

扩展消息推送渠道,当前已实现:站内信、邮件、短信、企业微信。

接口定义

java
public interface MessageChannelSPI {

    /**
     * 发送消息
     */
    boolean send(MessageDTO message);

    /**
     * 渠道类型标识
     */
    String getChannelType();
}

自定义实现示例(飞书消息)

java
@Component
public class FeishuMessageChannel implements MessageChannelSPI {

    @Override
    public boolean send(MessageDTO message) {
        // 调用飞书 API 发送消息
        return true;
    }

    @Override
    public String getChannelType() {
        return "feishu";
    }
}

SocialLoginSPI

扩展社交登录平台,当前已实现:微信、钉钉、GitHub。

接口定义

java
public interface SocialLoginSPI {

    /**
     * 获取授权 URL
     */
    String getAuthorizeUrl(String state);

    /**
     * 通过授权码获取用户信息
     */
    SocialUserInfo getUserInfo(String code);

    /**
     * 平台类型标识
     */
    String getPlatform();
}

自定义实现示例(飞书登录)

java
@Component
public class FeishuSocialLogin implements SocialLoginSPI {

    @Override
    public String getAuthorizeUrl(String state) {
        return "https://open.feishu.cn/open-apis/authen/v1/index?" +
               "app_id=" + appId + "&state=" + state;
    }

    @Override
    public SocialUserInfo getUserInfo(String code) {
        // 调用飞书 API 获取用户信息
    }

    @Override
    public String getPlatform() {
        return "feishu";
    }
}

EnterpriseCollaborationSPI

扩展企业协同平台对接,当前已实现:企业微信。

接口定义

java
public interface EnterpriseCollaborationSPI {

    /**
     * 同步组织架构
     */
    SyncResult syncOrganization();

    /**
     * 推送消息
     */
    boolean pushMessage(String userId, String content);

    /**
     * 平台类型标识
     */
    String getPlatform();
}

SPI 实现规范

  1. 实现类必须注册为 Spring Bean(@Component
  2. getType() / getChannelType() / getPlatform() 返回的标识必须唯一
  3. 实现类放在业务模块或 Plugin 中,不放在 Starter 中
  4. 使用 @Conditional 注解控制装配条件
  5. 异常不要吞掉,向上抛出由调用方处理

下一步

Forge Admin — 基于 Vue3 + Spring Boot 的企业级后台管理框架