Spring注入Map集合实现策略模式详解
更新时间:2023年11月23日 10:21:34 作者:chaojunma
这篇文章主要介绍了Spring注入Map集合实现策略模式详解,Spring提供通过@Resource注解将相同类型的对象注入到Map集合,并将对象的名字作为key,对象作为value封装进入Map,需要的朋友可以参考下
Spring注入实现策略模式
Spring提供通过@Resource注解将相同类型的对象注入到Map集合,并将对象的名字作为key,对象作为value封装进入Map,下面我们来具体实现一下:
首先我们定义一个抽象类
public abstract class TaskAbstractHandler { abstract public boolean handleJob(String message); }
定义多个对象分别继承上面的抽象类
@Slf4j @Component("taskA") public class TaskAHandler extends TaskAbstractHandler { @Override public boolean handleJob(String message) { // TODO 实现taskA具体的业务逻辑 } }
@Slf4j @Component("taskB") public class TaskBHandler extends TaskAbstractHandler { @Override public boolean handleJob(String message) { // TODO 实现taskB具体的业务逻辑 } }
注入Map对象
@Slf4j @Component public class ThirdMQListener implements MessageListener { @Resource private Map<String, TaskAbstractHandler> taskHandlerMap; @Override public Action consume(Message message, ConsumeContext consumeContext) { // 获取消息体 byte[] body = message.getBody(); String messageBody = new String(body); JSONObject json = JSON.parseObject(messageBody); // 获取任务编号 String taskCode = json.getString("taskCode"); // 根据tag获取具体调用方 TaskAbstractHandler taskHandler = taskHandlerMap.get(taskCode); if (taskHandler == null) { log.error("No object found according to the task code[{}]", taskCode); return Action.ReconsumeLater; } boolean isSuccess = taskHandler.handleJob(messageBody); if (isSuccess) { return Action.CommitMessage; } else { return Action.ReconsumeLater; } } }
上面通过@Resource注解将TaskAbstractHandler类型的对象注入到Map集合中,再根据消息体中的任务编号从taskHandlerMap对象或获取到具体的执行任务对象,从而根据任务编号执行不同的策略。
到此这篇关于Spring注入Map集合实现策略模式详解的文章就介绍到这了,更多相关Spring注入实现策略模式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Spring Security OAuth 自定义授权方式实现手机验证码
这篇文章主要介绍了Spring Security OAuth 自定义授权方式实现手机验证码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2021-02-02谈谈为JAXB和response设置编码,解决wechat4j中文乱码的问题
中文乱码是每个程序员都会遇到的问题,本篇文章主要介绍了谈谈为JAXB和response设置编码,解决wechat4j中文乱码的问题,具有一定的参考价值,有兴趣的可以了解一下。2016-12-12
最新评论