路徑匹配工具(AntPathMatcher vs PathPattern)


詳情參閱: BAT的烏托邦-https://mp.weixin.qq.com/s/tPKHMQWKW5wquQihJxp8gw

 

AntPathMatcher:Sping第一個版本(2013念)引入。

PathPattern:Spring 5 引入,所在包:org.springframework.web.util.pattern.PathPattern,所屬模塊為spring-web。可見它專為Web設計的“工具”。

 

PathPattern去掉了Ant字樣,但保持了很好的向下兼容性:除了不支持將**寫在path中間之外(以消除歧義),其它的匹配規則從行為上均保持和AntPathMatcher一致,並且還新增了強大的{*pathVariable} 的支持。整體上可認為后者兼容了前者的功能。

PathPattern性能比AntPathMatcher好。理論上pattern越復雜,PathPattern的優勢越明顯;

AntPathMatcher可用於非Web環境,而PathPattern只適用於Web環境。所以PathPattern也不是能完全替代AntPathMatcher的。

內部實現原理上看,AntPathMatcher進行的是純字符串操作和比對;而PathPattern則對於任何一個字符串的pattern最終都會被解析為若干段的PathElement,這些PathElement以鏈式結構連接起來用以表示該pattern,形成一個對象數據,這種結構化的表示使得可讀性更強、更具靈活性,從而獲得更好的性能表現。兩者簡單使用示例:

new AntPathMatcher().match("/api/v1/**", "/api/v1/2/3**");
new PathPatternParser().parse("/api/v1/**").matches(PathContainer.parsePath("/api/v1/2/3**")); //每一個pathPattern串對應一個PathPatternParser、每一個parsedPath串對應一個PathContainer
View Code

 

可能有小伙伴會說:在Service層,甚至Dao層我也可以正常使用PathPattern對象呀,何解?這個問題就相當於:HttpServletRequest屬於web層專用組件,但你依舊可以將其傳到Service層,甚至Dao層供以使用,在編譯、運行時不會報錯。但你可深入思考下,這么做合適嗎?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM