(攔截器、過(guò)濾器)之扯不斷理還亂

今天由我給我公司的小伙伴們把公司的攔截器庐椒、過(guò)濾器椒舵、監(jiān)聽(tīng)器、AOP梳理的以下约谈,然后給大家一起分享了一下用途笔宿,然后又從一些問(wèn)題出發(fā)延伸出來(lái)然后探討了一番犁钟,收獲頗多。夜深人靜了泼橘,我現(xiàn)在把這些整理一下給可以看到這篇文章的小伙伴分享一下涝动。

1.思想層面

這三個(gè)東西的思想都是AOP的思想,面向切面編程炬灭。如果不太了解AOP是什么的小伙伴可以去先搞懂這個(gè)是什么醋粟,AOP 百度百科然后再來(lái)看這篇文章。這三種東西都可以通過(guò)aop的思想去實(shí)現(xiàn)一些 日志記錄担败、權(quán)限控制昔穴、事務(wù)....等一系列的操作。但是這三者有什么不同呢提前?他們適用于什么場(chǎng)景呢吗货?

2.區(qū)別

攔截器 interceptor 和 過(guò)濾器 filter 的區(qū)別:

過(guò)濾器是屬于servlet的東西是java web的三大組件之一,它定義在web.xml中狈网,由定義的先后順序來(lái)決定執(zhí)行的先后順序宙搬。它是基于函數(shù)調(diào)用的,依賴于servlet拓哺,可以對(duì)幾乎所有請(qǐng)求起作用勇垛,只能在初始化時(shí)被調(diào)用一次。重要的一點(diǎn)是它不能獲取spring 中的bean士鸥。
攔截器是由spring框架支持的闲孤,是基于java反射的,它不依賴于servlet烤礁,只對(duì)action請(qǐng)求起作用讼积。在它里面可以使用spring中的bean。在一個(gè)action請(qǐng)求中脚仔,攔截器可以被多次調(diào)用勤众,但是過(guò)濾器只能調(diào)用一次。
附圖兩張鲤脏,出自這位小伙伴的文章们颜,講的挺不錯(cuò)的。

image.png

image.png

以上總結(jié)的是網(wǎng)上一搜都可以找到的區(qū)別猎醇。我這里再拿來(lái)使用一下窥突,然后接下來(lái)我們講一講,如何在Filter中使用spring bean對(duì)象呢姑食?
剛才在比較區(qū)別的時(shí)候已經(jīng)說(shuō)了Filter不能使用spring中的bean波岛,你這里又交給我們使用這不是打臉么。音半。则拷」北停咳咳,這不是哈煌茬,原本來(lái)說(shuō) Filter里確實(shí)不支持使用spring bean斥铺,但是你可以改造啊。改造之后就可以正確使用了坛善。不信你看~~~


使用這個(gè)東東

在你的web.xml中配置上這個(gè)東西晾蜘,然后把你的filter加上@Component,然后就可以在Filter中使用spring 的bean啦~ 是不是感覺(jué)好嗨哦眠屎?感覺(jué)人生已經(jīng)到達(dá)了巔峰剔交?
不過(guò),愛(ài)思考的你可能又要問(wèn)了改衩。這個(gè)DelegatingFilterProxy到底是個(gè)什么東西呢岖常? 看名字的話應(yīng)該叫做 委派過(guò)濾代理。 代理葫督?你有沒(méi)有想起來(lái)你曾夢(mèng)想仗劍走天涯竭鞍。。橄镜≠丝欤咳咳 跑偏了,代理模式記起來(lái)沒(méi)有?沒(méi)有洽胶?那你spring aop 總該知道把晒夹,它底層就是設(shè)計(jì)了代理模式。有兩種 一種是jdk 動(dòng)態(tài)代理姊氓,另一種是cglib字節(jié)碼增強(qiáng)惋戏。有興趣的小伙伴可以自行百度一波,這里就不展開(kāi)贅述了他膳。
然后讓我們點(diǎn)開(kāi)這個(gè)神奇的類,然后一探究竟绒窑。


這個(gè)類中所有的方法和變量

我們看到這里面有個(gè)initFilterBean()的方法棕孙,一看名字就知道是初始化的,然后點(diǎn)進(jìn)來(lái)看一下
方法具體實(shí)現(xiàn)

initFilterBean()該方法主要完成兩個(gè)功能:
1些膨、找到被代理類在spring中配置的id并賦值給targetBeanName蟀俊。
2、使用找到的id從spring容器中找到具體被代理的類订雾,并賦值給delegate
initDelegate()該方法的作用是肢预,從spring容器中獲取到具體被代理的filter 
我們知道一個(gè)過(guò)濾器的主要實(shí)現(xiàn)在doFilter()方法中,我們來(lái)看以下這個(gè)類中的doFilter方法的實(shí)現(xiàn)洼哎。


方法具體實(shí)現(xiàn)

該方法主要是使用被代理的filter烫映,并調(diào)用invokeDelegate方法沼本。
然后invokeDelegate方法中主要是調(diào)用被代理的filter中實(shí)現(xiàn)的doFilter方法《Ч担看到這里應(yīng)該大家也看明白了抽兆,可能我的知識(shí)還沒(méi)有那么豐富和深厚,不過(guò)我覺(jué)得大家應(yīng)該可以看得懂這個(gè)實(shí)現(xiàn)的過(guò)程族淮。這篇文章應(yīng)該讓你對(duì)過(guò)濾器和攔截器有一點(diǎn)認(rèn)識(shí)和了解了辫红。

好了,就總結(jié)到這里把祝辣。希望自己能在編程這條道路上越走越遠(yuǎn)一直堅(jiān)持~與君共勉贴妻,我是菠菜。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蝙斜,一起剝皮案震驚了整個(gè)濱河市名惩,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌乍炉,老刑警劉巖绢片,帶你破解...
    沈念sama閱讀 219,270評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異岛琼,居然都是意外死亡底循,警方通過(guò)查閱死者的電腦和手機(jī)槐瑞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)困檩,“玉大人,你說(shuō)我怎么就攤上這事悼沿。” “怎么了糟趾?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,630評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵慌植,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我义郑,道長(zhǎng)蝶柿,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,906評(píng)論 1 295
  • 正文 為了忘掉前任非驮,我火速辦了婚禮交汤,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘劫笙。我一直安慰自己芙扎,他們只是感情好星岗,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著纵顾,像睡著了一般伍茄。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上施逾,一...
    開(kāi)封第一講書(shū)人閱讀 51,718評(píng)論 1 305
  • 那天敷矫,我揣著相機(jī)與錄音,去河邊找鬼汉额。 笑死曹仗,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蠕搜。 我是一名探鬼主播怎茫,決...
    沈念sama閱讀 40,442評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼妓灌!你這毒婦竟也來(lái)了轨蛤?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,345評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤虫埂,失蹤者是張志新(化名)和其女友劉穎祥山,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體掉伏,經(jīng)...
    沈念sama閱讀 45,802評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡缝呕,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了斧散。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片供常。...
    茶點(diǎn)故事閱讀 40,117評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖鸡捐,靈堂內(nèi)的尸體忽然破棺而出栈暇,到底是詐尸還是另有隱情,我是刑警寧澤箍镜,帶...
    沈念sama閱讀 35,810評(píng)論 5 346
  • 正文 年R本政府宣布瞻鹏,位于F島的核電站,受9級(jí)特大地震影響鹿寨,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜薪夕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評(píng)論 3 331
  • 文/蒙蒙 一脚草、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧馏慨,春花似錦、人聲如沸写隶。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,011評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)冕房。三九已至,卻和暖如春给僵,著一層夾襖步出監(jiān)牢的瞬間详拙,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,139評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工饶辙, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人侧甫。 一個(gè)月前我還...
    沈念sama閱讀 48,377評(píng)論 3 373
  • 正文 我出身青樓披粟,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親守屉。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蒿辙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理俺叭,服務(wù)發(fā)現(xiàn)泰偿,斷路器熄守,智...
    卡卡羅2017閱讀 134,665評(píng)論 18 139
  • Spring Web MVC Spring Web MVC 是包含在 Spring 框架中的 Web 框架攒发,建立于...
    Hsinwong閱讀 22,414評(píng)論 1 92
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,823評(píng)論 6 342
  • 1.1 spring IoC容器和beans的簡(jiǎn)介 Spring 框架的最核心基礎(chǔ)的功能是IoC(控制反轉(zhuǎn))容器惠猿,...
    simoscode閱讀 6,717評(píng)論 2 22
  • 老話說(shuō)學(xué)好數(shù)理化走遍天下也不怕偶妖,雖然不一定對(duì)唉擂,但完全可以看出中國(guó)家長(zhǎng)對(duì)理科的重視。特別是數(shù)學(xué)腹缩,是許多家長(zhǎng)的...
    陪娃黨閱讀 257評(píng)論 0 0