欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Springboot項目Aop與攔截器與過濾器橫向?qū)Ρ?/h1>
 更新時間:2023年03月28日 09:40:33   作者:凡夫販夫  
前三篇文章已經(jīng)介紹過Springboot項目如何實現(xiàn)Aop,攔截器和過濾齊功能,這篇文章主要介紹三者的橫向?qū)Ρ?,本文有一定的參考價值,感興趣的小伙伴可以參考閱讀

前言

偉人曾經(jīng)說過,沒有調(diào)查就沒有發(fā)言權(好像是偉人說的,不管誰說的,這句話是正確的),有些東西看著簡單,張口就來,但很有可能是錯的。我個人的經(jīng)驗是,aop、過濾器、攔截器的實現(xiàn)方式很簡單,一學就會,不用就忘,忘了再學,學了再忘,如此循環(huán)內(nèi)耗何必呢?因此,如果你和我一樣,有一顆強烈的好奇之心,那么不管多簡單,動手敲起來吧,溫故而知新呢。

功能特性對比

過濾器

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

攔截器

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

總之,過濾器和攔截器的功能很類似,但是攔截器的適用范圍比過濾器更??;

Spring AOP

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

代碼實現(xiàn)

過濾器實現(xiàn)

傳送門:Springboot項目快速實現(xiàn)過濾器功能

攔截器實現(xiàn)

傳送門:Springboo項目快速實現(xiàn)攔截器功能

AOP實現(xiàn)

傳送門:Springboot項目快速實現(xiàn)Aop功能

實現(xiàn)示例源代碼地址:

https://gitcode.net/fox9916/fanfu-web.git(branch:Aop+filter+interceptor)

在實現(xiàn)示例中,主要的過濾器實現(xiàn)類、攔截器實現(xiàn)類和AOP實現(xiàn)類,與涉及到的接口之間的關系如下:

驗證結(jié)果

匹配中同一個目標(PersonController#getPerson())的情況下,過濾器、攔截器、SpringAOP的執(zhí)行優(yōu)先級是:

過濾器>攔截器>SpringAOP,執(zhí)行順序是先進后出;

工作原理

從驗證結(jié)果的輸出日志中,已經(jīng)可以看到,在匹配中同一目標時,過濾器、攔截器、SpringAOP的執(zhí)行優(yōu)先級是:過濾器>攔截器>SpringAOP,執(zhí)行順序是先進后出,具體的不同則體現(xiàn)在以下幾個方面:

1、作用域不同

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

2、顆粒度的不同

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

總結(jié)

過濾器、攔截器、AOP本質(zhì)上來講,都是面向切面編程的實踐,只是在功能特性、適用范圍、實現(xiàn)細節(jié)上有一些區(qū)別。一般情況下,過濾器能實現(xiàn)的功能,攔截器也可以實現(xiàn);過濾器、攔截器可以實現(xiàn)的功能,AOP也可以實現(xiàn);那么在業(yè)務開發(fā)過程中作選型的時候,是不是直接用AOP就完了,其實我認為不能這樣,還是需要根據(jù)具體的業(yè)務環(huán)境和技術環(huán)境進行選擇,殺雞可必要用牛刀,你說呢?

以上就是Springboot項目Aop與攔截器與過濾器橫向?qū)Ρ鹊脑敿殐?nèi)容,更多關于Aop與攔截器與過濾器的對比的資料請關注腳本之家其它相關文章!

相關文章

  • Struts2 通過ognl表達式實現(xiàn)投影

    Struts2 通過ognl表達式實現(xiàn)投影

    這篇文章主要介紹了Struts2 通過ognl表達式實現(xiàn)投影,具有一定參考價值,需要的朋友可以了解下。
    2017-09-09
  • 詳解Spring AOP 攔截器的基本實現(xiàn)

    詳解Spring AOP 攔截器的基本實現(xiàn)

    本篇文章主要介紹了詳解Spring AOP 攔截器的基本實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • Spring?Boot自定義監(jiān)控指標的詳細過程

    Spring?Boot自定義監(jiān)控指標的詳細過程

    這篇文章主要介紹了Spring?Boot如何自定義監(jiān)控指標?,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • Java中過濾器、監(jiān)聽器和攔截器的區(qū)別詳解

    Java中過濾器、監(jiān)聽器和攔截器的區(qū)別詳解

    這篇文章主要介紹了Java中過濾器、監(jiān)聽器和攔截器的區(qū)別詳解,有些朋友可能不了解過濾器、監(jiān)聽器和攔截器的區(qū)別,本文就來詳細講一下,相信看完你會有所收獲,需要的朋友可以參考下
    2024-01-01
  • Java方法的參數(shù)傳遞機制實例詳解

    Java方法的參數(shù)傳遞機制實例詳解

    這篇文章主要介紹了Java方法的參數(shù)傳遞機制,結(jié)合實例形式詳細分析了java方法參數(shù)傳遞機制原理、實現(xiàn)方法及操作注意事項,需要的朋友可以參考下
    2019-09-09
  • 一文了解Spring中攔截器的原理與使用

    一文了解Spring中攔截器的原理與使用

    在web開發(fā)中,攔截器是經(jīng)常用到的功能。它可以幫我們預先設置數(shù)據(jù)以及統(tǒng)計方法的執(zhí)行效率等等。今天就來詳細的談一下spring中的攔截器,需要的可以參考一下
    2022-06-06
  • Lombok的詳細使用及優(yōu)缺點總結(jié)

    Lombok的詳細使用及優(yōu)缺點總結(jié)

    最近在學Mybatis,接觸到了Lombok的使用,所以寫一篇文章記錄一下,包括lombok的安裝及使用優(yōu)缺點,感興趣的朋友跟隨小編一起看看吧
    2021-07-07
  • java使用定時器實現(xiàn)監(jiān)聽數(shù)據(jù)變化

    java使用定時器實現(xiàn)監(jiān)聽數(shù)據(jù)變化

    這篇文章主要為大家詳細介紹了Java如何使用定時器監(jiān)聽數(shù)據(jù)變化,當滿足某個條件時(例如沒有數(shù)據(jù)更新)自動執(zhí)行某項任務,有興趣的可以了解下
    2023-11-11
  • Springboot如何實現(xiàn)自定義異常數(shù)據(jù)

    Springboot如何實現(xiàn)自定義異常數(shù)據(jù)

    這篇文章主要介紹了Springboot如何實現(xiàn)自定義異常數(shù)據(jù),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-09-09
  • 使用IDEA創(chuàng)建java項目的步驟詳解(hello word)

    使用IDEA創(chuàng)建java項目的步驟詳解(hello word)

    這篇文章主要介紹了使用IDEA創(chuàng)建java項目的步驟詳解(hello word),本文分步驟通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12

最新評論