探索 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 @ 2024-11-02 16:06  半杯清茶  阅读(382)  评论(0)    收藏  举报