一、痛点
在日常开发中,不想通过写一堆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
标签:execute,探索,UserExtPt,void,context,组件,public,cola From: https://www.cnblogs.com/wallacepang/p/18522110