Spring AOP

Java中常見的AOP技術(shù)有兩個(gè),分別是Filter和代理模式(也可以稱為過濾器和攔截器)

過濾器,實(shí)現(xiàn)過濾功能,該方法就是對每個(gè)請求及響應(yīng)增加的額外處理。該方法可以實(shí)現(xiàn)對用戶請求進(jìn)行預(yù)處理(ServletRequest request),也可實(shí)現(xiàn)對服務(wù)器響應(yīng)進(jìn)行后處理(ServletResponse response);

攔截器,在AOP(Aspect-Oriented Programming)中用于在某個(gè)方法或字段被訪問之前,進(jìn)行攔截,然后在之前或之后加入某些操作。攔截是AOP的一種實(shí)現(xiàn)策略。

過濾器:是在java web中,傳入的request,response提前過濾掉一些信息,或者提前設(shè)置一些參數(shù),然后再傳入servlet或者strutsedaction進(jìn)行業(yè)務(wù)邏輯,比如過濾掉非法Url(bushi login.do的地址請求,如果用戶沒有登錄的話就都過濾掉),或者在傳入servlet或者struts的action前統(tǒng)一設(shè)置字符集,或者去除掉一些非法字符

攔截器:面向切面編程,在service或者一個(gè)方法前調(diào)用一個(gè)方法,或者在方法后調(diào)用一個(gè)方法,比如動(dòng)態(tài)代理就是攔截器的簡單實(shí)現(xiàn)。

區(qū)別:1.攔截器是基于java的反射機(jī)制,而過濾器是基于函數(shù)回調(diào)

2.攔截器不依賴于servlet容器,過濾器依賴servlet容器

3.攔截器只能對action請求起作用,而過濾器則可以對幾乎所有的請求起作用

4.攔截器可以訪問action上下文,值棧里的對象,而過濾器不能訪問

5.在action的生命周期中,攔截器可以多次被調(diào)用,而過濾器只能在容器初始化時(shí)被調(diào)用一次

6.攔截器可以獲取IOC容器中的各個(gè)bean,而過濾器就不行,這點(diǎn)很重要,在攔截器里注入一個(gè)service,可以調(diào)用業(yè)務(wù)邏輯

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容