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ù)邏輯
