Forge SPI 扩展点索引
Forge 通过 SPI 机制提供预定义扩展点,业务模块实现接口即可扩展系统能力。
SPI 总览
| SPI 接口 | 模块 | 扩展能力 |
|---|---|---|
| FileStorageSPI | forge-starter-file | 自定义文件存储方式 |
| MessageChannelSPI | forge-plugin-message | 自定义消息推送渠道 |
| SocialLoginSPI | forge-starter-social | 自定义社交登录平台 |
| EnterpriseCollaborationSPI | forge-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 实现规范
- 实现类必须注册为 Spring Bean(
@Component) getType()/getChannelType()/getPlatform()返回的标识必须唯一- 实现类放在业务模块或 Plugin 中,不放在 Starter 中
- 使用
@Conditional注解控制装配条件 - 异常不要吞掉,向上抛出由调用方处理
