Spring注入Map集合實(shí)現(xiàn)策略模式詳解
Spring注入實(shí)現(xiàn)策略模式
Spring提供通過(guò)@Resource注解將相同類(lèi)型的對(duì)象注入到Map集合,并將對(duì)象的名字作為key,對(duì)象作為value封裝進(jìn)入Map,下面我們來(lái)具體實(shí)現(xiàn)一下:
首先我們定義一個(gè)抽象類(lèi)
public abstract class TaskAbstractHandler { abstract public boolean handleJob(String message); }
定義多個(gè)對(duì)象分別繼承上面的抽象類(lèi)
@Slf4j @Component("taskA") public class TaskAHandler extends TaskAbstractHandler { @Override public boolean handleJob(String message) { // TODO 實(shí)現(xiàn)taskA具體的業(yè)務(wù)邏輯 } }
@Slf4j @Component("taskB") public class TaskBHandler extends TaskAbstractHandler { @Override public boolean handleJob(String message) { // TODO 實(shí)現(xiàn)taskB具體的業(yè)務(wù)邏輯 } }
注入Map對(duì)象
@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ù)編號(hào) 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; } } }
上面通過(guò)@Resource注解將TaskAbstractHandler類(lèi)型的對(duì)象注入到Map集合中,再根據(jù)消息體中的任務(wù)編號(hào)從taskHandlerMap對(duì)象或獲取到具體的執(zhí)行任務(wù)對(duì)象,從而根據(jù)任務(wù)編號(hào)執(zhí)行不同的策略。
到此這篇關(guān)于Spring注入Map集合實(shí)現(xiàn)策略模式詳解的文章就介紹到這了,更多相關(guān)Spring注入實(shí)現(xiàn)策略模式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Springboot熱部署實(shí)現(xiàn)原理及實(shí)例詳解
這篇文章主要介紹了Springboot熱部署實(shí)現(xiàn)原理及實(shí)例詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05groovy腳本定義結(jié)構(gòu)表一鍵生成POJO類(lèi)
這篇文章主要為大家介紹了groovy腳本定義結(jié)構(gòu)表一鍵生成POJO類(lèi)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03java抓取網(wǎng)頁(yè)數(shù)據(jù)示例
要通java獲取整個(gè)網(wǎng)頁(yè)的html內(nèi)容,或者某個(gè)網(wǎng)絡(luò)文件的內(nèi)容,可以使用java提供的HttpURLConnection類(lèi)來(lái)實(shí)現(xiàn)對(duì)網(wǎng)頁(yè)內(nèi)容的抓取2014-03-03Spring boot中@Conditional和spring boot的自動(dòng)配置實(shí)例詳解
本文通過(guò)實(shí)例給大家介紹了Spring boot中@Conditional和spring boot的自動(dòng)配置,需要的朋友可以參考下2018-05-05Spring使用注解更簡(jiǎn)單的讀取和存儲(chǔ)對(duì)象的方法
這篇文章主要介紹了Spring使用注解更簡(jiǎn)單的讀取和存儲(chǔ)對(duì)象的方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2023-07-07