探索 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

posted @   半杯清茶  阅读(100)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示