Java中常見的AOP技術(shù)有兩個锌杀,分別是Filter和代理模式(也可以稱為過濾器和攔截器)
過濾器芳撒,實現(xiàn)過濾功能,該方法就是對每個請求及響應(yīng)增加的額外處理杜窄。該方法可以實現(xiàn)對用戶請求進行預(yù)處理(ServletRequest request)利耍,也可實現(xiàn)對服務(wù)器響應(yīng)進行后處理(ServletResponse response)蚌本;
攔截器,在AOP(Aspect-Oriented Programming)中用于在某個方法或字段被訪問之前隘梨,進行攔截程癌,然后在之前或之后加入某些操作。攔截是AOP的一種實現(xiàn)策略轴猎。
過濾器:是在java web中嵌莉,傳入的request,response提前過濾掉一些信息,或者提前設(shè)置一些參數(shù)税稼,然后再傳入servlet或者strutsedaction進行業(yè)務(wù)邏輯烦秩,比如過濾掉非法Url(bushi login.do的地址請求,如果用戶沒有登錄的話就都過濾掉)郎仆,或者在傳入servlet或者struts的action前統(tǒng)一設(shè)置字符集,或者去除掉一些非法字符
攔截器:面向切面編程兜蠕,在service或者一個方法前調(diào)用一個方法扰肌,或者在方法后調(diào)用一個方法,比如動態(tài)代理就是攔截器的簡單實現(xiàn)熊杨。
區(qū)別:1.攔截器是基于java的反射機制曙旭,而過濾器是基于函數(shù)回調(diào)
2.攔截器不依賴于servlet容器,過濾器依賴servlet容器
3.攔截器只能對action請求起作用晶府,而過濾器則可以對幾乎所有的請求起作用
4.攔截器可以訪問action上下文桂躏,值棧里的對象,而過濾器不能訪問
5.在action的生命周期中川陆,攔截器可以多次被調(diào)用剂习,而過濾器只能在容器初始化時被調(diào)用一次
6.攔截器可以獲取IOC容器中的各個bean,而過濾器就不行,這點很重要鳞绕,在攔截器里注入一個service失仁,可以調(diào)用業(yè)務(wù)邏輯