探索 cola 扩展组件的应用
一、痛点
在日常开发中,不想通过写一堆if...else...实现业务逻辑判断,使得代码越来越长难以维护,又不想每次都用编码形式在 Spring 中实现策略模式。要是有一个组件能通过注解配置,同时还能支持多个维度的策略判断就简单了。
二、如何解决
在学习 cola 框架时,发现 cola 扩展组件能通过注解的形式实现不同策略扩展。在注解盛行的当下,非常合适。
三、案例
1.添加依赖
<dependency>
<groupId>com.alibaba.cola</groupId>
<artifactId>cola-component-extension-starter</artifactId>
<version>4.3.2</version>
</dependency>
2.定义扩展点
实现 com.alibaba.cola.extension.ExtensionPointI 声明一个扩展点
public interface UserExtPt extends ExtensionPointI {
/**
* @param context 请求上下文
*/
void execute(UserContext context);
}
3.实现扩展点
@Slf4j
@Extension(bizId = "user1")
public class User1Ext implements UserExtPt {
/**
* @param context 请求上下文
*/
void execute(UserContext context){
// 实现业务逻辑
}
}
@Slf4j
@Extension(bizId = "user2")
public class User2Ext implements UserExtPt {
/**
* @param context 请求上下文
*/
void execute(UserContext context){
// 实现业务逻辑
}
}
@Slf4j
@Extension(bizId = "user3")
public class User3Ext implements UserExtPt {
/**
* @param context 请求上下文
*/
void execute(UserContext context){
// 实现业务逻辑
}
}
4.使用
@Component
@Slf4j
public class UserCmdExe {
@Resource
private ExtensionExecutor extensionExecutor;
public void execute(UserContext context) {
/**
* BizScenario.valueOf("user1") 对应 @Extension(bizId = "user1") 注解里的声明
* 支持多个维度和数组,
, */
extensionExecutor.executeVoid(UserExtPt.class,
BizScenario.valueOf("user1"),
extension -> extension.execute(context));
}
参考:https://blog.csdn.net/yangyanping20108/article/details/134968496
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现