Spring注入Map集合實現(xiàn)策略模式詳解
Spring注入實現(xiàn)策略模式
Spring提供通過@Resource注解將相同類型的對象注入到Map集合,并將對象的名字作為key,對象作為value封裝進入Map,下面我們來具體實現(xiàn)一下:
首先我們定義一個抽象類
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 實現(xiàn)taskA具體的業(yè)務邏輯 } }
@Slf4j @Component("taskB") public class TaskBHandler extends TaskAbstractHandler { @Override public boolean handleJob(String message) { // TODO 實現(xiàn)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"); // 根據(jù)tag獲取具體調(diào)用方 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集合中,再根據(jù)消息體中的任務編號從taskHandlerMap對象或獲取到具體的執(zhí)行任務對象,從而根據(jù)任務編號執(zhí)行不同的策略。
到此這篇關于Spring注入Map集合實現(xiàn)策略模式詳解的文章就介紹到這了,更多相關Spring注入實現(xiàn)策略模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Spring boot中@Conditional和spring boot的自動配置實例詳解
本文通過實例給大家介紹了Spring boot中@Conditional和spring boot的自動配置,需要的朋友可以參考下2018-05-05