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具體的業(yè)務邏輯 } }
@Slf4j @Component("taskB") public class TaskBHandler extends TaskAbstractHandler { @Override public boolean handleJob(String message) { // TODO 實現taskB具體的業(yè)務邏輯 } }
注入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對象或獲取到具體的執(zhí)行任務對象,從而根據任務編號執(zhí)行不同的策略。
到此這篇關于Spring注入Map集合實現策略模式詳解的文章就介紹到這了,更多相關Spring注入實現策略模式內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Spring boot中@Conditional和spring boot的自動配置實例詳解
本文通過實例給大家介紹了Spring boot中@Conditional和spring boot的自動配置,需要的朋友可以參考下2018-05-05