AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當前位置:首頁 > 科技  > 軟件

如果把AOP、過濾器和攔截器一起放在Spring Boot中,會發生什么呢?

來源: 責編: 時間:2024-01-08 09:15:01 215觀看
導讀前言偉人曾經說過,沒有調查就沒有發言權,有些東西看著簡單,張口就來,但很有可能是錯的。我個人的經驗是,aop、過濾器、攔截器的實現方式很簡單,一學就會,不用就忘,忘了再學,學了再忘,如此循環內耗何必呢?因此,如果你和我一樣,有一

前言

偉人曾經說過,沒有調查就沒有發言權,有些東西看著簡單,張口就來,但很有可能是錯的。我個人的經驗是,aop、過濾器、攔截器的實現方式很簡單,一學就會,不用就忘,忘了再學,學了再忘,如此循環內耗何必呢?因此,如果你和我一樣,有一顆強烈的好奇之心,那么不管多簡單,動手敲起來吧,溫故而知新呢。8Gn28資訊網——每日最新資訊28at.com

功能特性對比

過濾器

過濾器(Filter)是與servlet相關聯的一個接口,主要適用于java web項目中,依賴于Servlet容器,是利用java的回調機制來實現過濾攔截來自瀏覽器端的http請求,可以攔截到訪問URL對應的方法的請求和響應(ServletRequest request, ServletResponse response),但是不能對請求和響應信息中的值進行修改;一般用于設置字符編碼、鑒權操作等;如果想要做到更細一點的類和方法或者是在非servlet環境中使用,則是做不到的;所以凡是依賴Servlet容器的環境,過濾器都可以使用,如Struts2、SpringMVC;8Gn28資訊網——每日最新資訊28at.com

圖片圖片8Gn28資訊網——每日最新資訊28at.com

攔截器

攔截器的(HandlerInterceptor)使用范圍以及功能和過濾器很類似,但是也是有區別的。首先,攔截器(HandlerInterceptor)適用于SpringMVC中,因為HandlerInterceptor接口是SpringMVC相關的一個接口,而實現java Web項目,SpringMVC是目前的首選選項,但不是唯一選項,還有struts2等;因此,如果是非SpingMVC的項目,HandlerInterceptor無法使用的;其次,和過濾器一樣,攔截器可以攔截到訪問URL對應的方法的請求和響應(ServletRequest request, ServletResponse response),但是不能對請求和響應信息中的值進行修改;一般用于設置字符編碼、鑒權操作等;如果想要做到更細一點的類和方法或者是在非servlet環境中使用,則也是是做不到的;8Gn28資訊網——每日最新資訊28at.com

總之,過濾器和攔截器的功能很類似,但是攔截器的適用范圍比過濾器更??;8Gn28資訊網——每日最新資訊28at.com

圖片圖片8Gn28資訊網——每日最新資訊28at.com

Spring AOP

AOP (Aspect Orient Programming),直譯過來就是 面向切面編程,AOP 是一種編程思想,是面向對象編程(OOP)的一種補充。面向切面編程,實現在不修改源代碼的情況下給程序動態統一添加額外功能的一種技術,AOP可以攔截指定的方法并且對方法增強,而且無需侵入到業務代碼中,使業務與非業務處理邏輯分離;而SpringAOP,則是AOP的一種具體實現,Spring內部對SpringAOP的應用最經典的場景就是Spring的事務,通過事務注解的配置,Spring會自動在業務方法中開啟、提交業務,并且在業務處理失敗時,執行相應的回滾策略;與過濾器、攔截器相比,更加重要的是其適用范圍不再局限于SpringMVC項目,可以在任意一層定義一個切點,織入相應的操作,并且還可以改變返回值;8Gn28資訊網——每日最新資訊28at.com

圖片圖片8Gn28資訊網——每日最新資訊28at.com

代碼實現

過濾器實現

傳送門:輕松駕馭Spring Boot與Filter:實用經驗與技巧分享8Gn28資訊網——每日最新資訊28at.com

AOP實現

傳送門:輕松駕馭Spring Boot與AOP:實用經驗與技巧分享8Gn28資訊網——每日最新資訊28at.com

攔截器實現

傳送門:輕松駕馭Spring Boot與Filter:實用經驗與技巧分享8Gn28資訊網——每日最新資訊28at.com

8Gn28資訊網——每日最新資訊28at.com

實現示例源代碼地址:https://gitcode.net/fox9916/fanfu-web.git(branch:Aop+filter+interceptor)8Gn28資訊網——每日最新資訊28at.com

在實現示例中,主要的過濾器實現類、攔截器實現類和AOP實現類,與涉及到的接口之間的關系如下:8Gn28資訊網——每日最新資訊28at.com

圖片圖片8Gn28資訊網——每日最新資訊28at.com

驗證結果

匹配中同一個目標(PersonController#getPerson())的情況下,過濾器、攔截器、SpringAOP的執行優先級是:8Gn28資訊網——每日最新資訊28at.com

過濾器>攔截器>SpringAOP,執行順序是先進后出;8Gn28資訊網——每日最新資訊28at.com

圖片圖片8Gn28資訊網——每日最新資訊28at.com

工作原理

從驗證結果的輸出日志中,已經可以看到,在匹配中同一目標時,過濾器、攔截器、SpringAOP的執行優先級是:過濾器>攔截器>SpringAOP,執行順序是先進后出,具體的不同則體現在以下幾個方面:8Gn28資訊網——每日最新資訊28at.com

1、作用域不同8Gn28資訊網——每日最新資訊28at.com

  • 過濾器依賴于servlet容器,只能在 servlet容器,web環境下使用,對請求-響應入口處進行過濾攔截;
  • 攔截器依賴于springMVC,可以在SpringMVC項目中使用,而SpringMVC的核心是DispatcherServlet,而DispatcherServlet又屬于Servlet的子類,因此作用域和過濾器類似;
  • SpringAOP對作用域沒有限制,只要定義好切點,可以在請求-響應的入口層(controller層)攔截處理,也可以在請求的業務處理層(service層)攔截處理;

2、顆粒度的不同8Gn28資訊網——每日最新資訊28at.com

  • 過濾器的控制顆粒度比較粗,只能在doFilter()中對請求和響應進行過慮和攔截處理;
  • 攔截器提供更精細顆粒度的控制,有preHandle()、postHandle()、afterCompletion(),可以在controller對請求處理之前、請求處理后、請求響應完畢織入一些業務操作;
  • SpringAOP,提供了前置通知、后置通知、返回后通知、異常通知、環繞通知,比攔截器更加精細化的顆粒度控制,甚至可以修改返回值;

圖片圖片8Gn28資訊網——每日最新資訊28at.com

總結

過濾器、攔截器、AOP本質上來講,都是面向切面編程的實踐,只是在功能特性、適用范圍、實現細節上有一些區別。一般情況下,過濾器能實現的功能,攔截器也可以實現;過濾器、攔截器可以實現的功能,AOP也可以實現;那么在業務開發過程中作選型的時候,是不是直接用AOP就完了,其實我認為不能這樣,還是需要根據具體的業務環境和技術環境進行選擇,殺雞可必要用牛刀,你說呢?8Gn28資訊網——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-57864-0.html如果把AOP、過濾器和攔截器一起放在Spring Boot中,會發生什么呢?

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: React hooks的閉包陷阱是怎么回事

下一篇: 盤一盤這個沒資格出現在面試環節的場景題

標簽:
  • 熱門焦點
  • 一加Ace2 Pro官宣:普及16G內存 引領24G

    一加官方今天繼續為本月發布的新機一加Ace2 Pro帶來預熱,公布了內存方面的信息。“淘汰 8GB ,12GB 起步,16GB 普及,24GB 引領,還有呢?#一加Ace2Pro#,2023 年 8 月,敬請期待?!蓖瑫r
  • 石頭智能洗地機A10 Plus體驗:雙向自清潔治好了我的懶癌

    一、前言和介紹專為家庭請假懶人而生的石頭科技在近日又帶來了自己的全新旗艦新品,石頭智能洗地機A10 Plus。從這個產品名上就不難看出,這次石頭推出的并不是常見的掃地機器
  • 掘力計劃第 20 期:Flutter 混合開發的混亂之治

    在掘力計劃系列活動第20場,《Flutter 開發實戰詳解》作者,掘金優秀作者,Github GSY 系列目負責人戀貓的小郭分享了Flutter 混合開發的混亂之治。Flutter 基于自研的 Skia 引擎
  • K8S | Service服務發現

    一、背景在微服務架構中,這里以開發環境「Dev」為基礎來描述,在K8S集群中通常會開放:路由網關、注冊中心、配置中心等相關服務,可以被集群外部訪問;圖片對于測試「Tes」環境或者
  • Java NIO內存映射文件:提高文件讀寫效率的優秀實踐!

    Java的NIO庫提供了內存映射文件的支持,它可以將文件映射到內存中,從而可以更快地讀取和寫入文件數據。本文將對Java內存映射文件進行詳細的介紹和演示。內存映射文件概述內存
  • 一文掌握 Golang 模糊測試(Fuzz Testing)

    模糊測試(Fuzz Testing)模糊測試(Fuzz Testing)是通過向目標系統提供非預期的輸入并監視異常結果來發現軟件漏洞的方法??梢杂脕戆l現應用程序、操作系統和網絡協議等中的漏洞或
  • Python異步IO編程的進程/線程通信實現

    這篇文章再講3種方式,同時講4中進程間通信的方式一、 Python 中線程間通信的實現方式共享變量共享變量是多個線程可以共同訪問的變量。在Python中,可以使用threading模塊中的L
  • 當家的盒馬,加速謀生

    來源 | 價值星球Planet作者 | 歸去來自己“當家”的盒馬,開始加速謀生了。據盒馬官微消息,盒馬計劃今年開放生鮮供應鏈,將其生鮮商品送往食堂。目前,盒馬在上海已經與
  • iQOO Neo8 Pro評測:旗艦雙芯加持 最強性能游戲旗艦

    【Techweb評測】去年10月,iQOO推出了一款Neo7手機,該機搭載了聯發科天璣9000+,配備獨顯芯片Pro+,帶來了同價位段最佳的游戲體驗,一經上市便受到了諸多用
Top