Spring注入Map集合實現(xiàn)策略模式詳解
Spring注入實現(xiàn)策略模式
Spring提供通過@Resource注解將相同類型的對象注入到Map集合,并將對象的名字作為key,對象作為value封裝進(jìn)入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è)務(wù)邏輯 } }
@Slf4j @Component("taskB") public class TaskBHandler extends TaskAbstractHandler { @Override public boolean handleJob(String message) { // TODO 實現(xiàn)taskB具體的業(yè)務(wù)邏輯 } }
注入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); // 獲取任務(wù)編號 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ù)消息體中的任務(wù)編號從taskHandlerMap對象或獲取到具體的執(zhí)行任務(wù)對象,從而根據(jù)任務(wù)編號執(zhí)行不同的策略。
到此這篇關(guān)于Spring注入Map集合實現(xiàn)策略模式詳解的文章就介紹到這了,更多相關(guān)Spring注入實現(xiàn)策略模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
groovy腳本定義結(jié)構(gòu)表一鍵生成POJO類
這篇文章主要為大家介紹了groovy腳本定義結(jié)構(gòu)表一鍵生成POJO類示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03Spring boot中@Conditional和spring boot的自動配置實例詳解
本文通過實例給大家介紹了Spring boot中@Conditional和spring boot的自動配置,需要的朋友可以參考下2018-05-05