第一種filter屬於servlet提供的,後兩者是spring提供的,handlerinterceptor屬於spring mvc專案提供的,用來攔截請求,在methodinterceptor之前執行。
實現乙個handlerinterceptor可以實現介面handlerinterceptor,也可以繼承handlerinterceptoradapter類,兩種方法一樣。
methodinterceptor是aop專案中的***,它攔截的目標是方法,即使不是controller中的方法。
實現methodinterceptor***大致也分為兩種,一種是實現methodinterceptor介面,另一種利用aspect的註解或配置。
關於實現methodinterceptor介面的這種方法,還需要在配置檔案中做配置,在springmvc中使用還可以,在springboot中使用起來似乎沒有那麼方便。
在pom.xml中新增依賴:
org.springframework.bootgroupid>
spring-boot-starter-aopartifactid>
dependency>
新建testaspect類
import org.aspectj.lang.joinpoint;
import org.aspectj.lang.annotation.after;
import org.aspectj.lang.annotation.aspect;
import org.aspectj.lang.annotation.before;
import org.springframework.core.annotation.order;
import org.springframework.stereotype.component;
@aspect
@order(-99) // 控制多個aspect的執行順序,越小越先執行
@component
public class testaspect
@after("execution(public * com.zhangxf.dingcan..*(..))")
public void aftertest(joinpoint point)
}
然後建立乙個controller驗證一下
import org.springframework.stereotype.controller;
import org.springframework.web.bind.annotation.responsebody;
import com.zhangxf.dingcan.pojo.user;
@controller
public class hellocontroller
}
在瀏覽器輸入http://localhost:8080/get
關於集中攔截方法的區別總結:
handlerinterceptoer攔截的是請求位址,所以針對請求位址做一些驗證、預處理等操作比較合適。當你需要統計請求的響應時間時methodinterceptor將不太容易做到,因為它可能跨越很多方法或者只涉及到已經定義好的方法中一部分**。
methodinterceptor利用的是aop的實現機制,在本文中只說明了使用方式,關於原理和機制方面介紹的比較少,因為要說清楚這些需要講出aop的相當一部分內容。在對一些普通的方法上的攔截handlerinterceptoer就無能為力了,這時候只能利用aop的methodinterceptor。
filter是servlet規範規定的,不屬於spring框架,也是用於請求的攔截。但是它適合更粗粒度的攔截,在請求前後做一些編譯碼處理、日誌記錄等.
Spring 通過註解方式實現AOP切面程式設計
spring 切面程式設計的目的是實現 的業務邏輯的解耦。切面程式設計用於諸如日誌記錄,事務處理,等非業務性的邏輯操作。目前spring的aop只能應用於方法層級上,無法在類 成員欄位等層級上操作。以下是srping的aop程式設計分為註解方式和xml配置方式。以下過程詳細說明了通過註解方式實現ao...
Spring註解驅動 註解實現AOP切面程式設計
需求 在指定包下的所有類中的有方法都加上前置和後置通知。1.aop類,使用的註解 aspect表示當前的類為aop類 aspect public class logaop after execution service.public void doafter bean public logaop l...
C 使用KingAOP實現AOP面向切面程式設計二
本文繼續上篇講述一下比較複雜點的aop例子,先新建乙個控制台專案,然後同樣先在nuget中搜尋安裝kingaop到專案中 1 專案結構 2 定義乙個登入實體類user和loggingaspect切面日誌類 public class user public string name public str...