日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

责任链模式Java+Spring实现

發布時間:2024/1/1 java 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 责任链模式Java+Spring实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

業務場景

一般的操作校驗接口有參數校驗、安全校驗、黑名單校驗、操作規則等等。

問題

常見同步編寫code,校驗失敗return,代碼鏈路較長,修改不符合開閉原則。

責任鏈模式定義

責任鏈模式為請求創建了一個接收者對象的鏈。執行鏈上有多個對象節點,每個對象節點都有機會(條件匹配)處理請求事務,如果某個對象節點處理完了,就可以根據實際業務需求傳遞給下一個節點繼續處理或者返回處理完畢。這種模式給予請求的類型,對請求的發送者和接收者進行解耦。

責任鏈模式使用

  • 一個接口或者抽象類

  • 每個對象差異化處理

  • 對象鏈(數組)初始化(連起來)

責任鏈模式實現

抽象類:

  • 有一個指向責任下一個對象的屬性

  • 一個設置下一個對象的set方法

  • 給子類對象差異化實現的方法

public abstract class AbstractCheckHandler {/*** 責任鏈中的下一個對象*/private AbstractCheckHandler nextHandler;/*** 責任鏈的下一個對象*/public void setNextHandler(AbstractCheckHandler nextHandler) {this.nextHandler = nextHandler;}/*** 具體參數攔截邏輯,給子類去實現*/public void filter(Request request, Response response) {handle(request, response);// 處理結果為空或者成功,則繼續處理;否則結束處理退出,不需要整條鏈路處理if (ObjectUtil.isNull(response) || HttpStatusEnum.SERVER_SUCCESS.getCODE().equals(response.getCode())) {if (getNextHandler() != null) {getNextHandler().filter(request, response);}}}public AbstractCheckHandler getNextHandler() {return nextHandler;}public abstract void handle(Request Request, Response response); }

每個對象處理

即各種校驗場景

/*** 參數校驗對象**/ @Component @Order(1) //順序排第1,最先校驗 public class CheckParamFilterObject extends AbstractCheckHandler {@Overridepublic void doFilter(Request request, Response response) {System.out.println("非空參數檢查");} }/*** 安全校驗對象*/ @Component @Order(2) //校驗順序排第2 public class CheckSecurityFilterObject extends AbstractCheckHandler {@Overridepublic void doFilter(Request request, Response response) {//invoke Security checkSystem.out.println("安全調用校驗");} }/*** 黑名單校驗對象*/ @Component @Order(3) //校驗順序排第3 public class CheckBlackFilterObject extends AbstractCheckHandler {@Overridepublic void doFilter(Request request, Response response) {//invoke black list checkSystem.out.println("校驗黑名單");} }

對象處理責任鏈實現

@Component public class RequestCheckHandlerChain {/*** 自動注入各個責任鏈的對象*/@Autowiredprivate List<AbstractCheckHandler> abstractHandleList;private AbstractCheckHandler abstractHandler;//spring注入后自動執行,責任鏈的對象連接起來@PostConstructpublic void initializeChainFilter() {for (int i = 0; i < abstractHandleList.size(); i++) {if (i == 0) {abstractHandler = abstractHandleList.get(0);} else {AbstractCheckHandler currentHander = abstractHandleList.get(i - 1);AbstractCheckHandler nextHander = abstractHandleList.get(i);currentHander.setNextHandler(nextHander);}}}//調用執行使用public Response exec(Request request, Response response) {abstractHandler.filter(request, response);return response;}public AbstractCheckHandler getAbstractHandler() {return abstractHandler;}public void setAbstractHandler(AbstractCheckHandler abstractHandler) {this.abstractHandler = abstractHandler;} }

調用

@Autowired private RequestCheckHandlerChain requestCheckHandlerChain;...requestCheckHandlerChain.exec(request, response);

End

總結

以上是生活随笔為你收集整理的责任链模式Java+Spring实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。