回覆列表
-
1 # JAVA君
-
2 # JAVA小學生
攔截器攔截URL,他和過濾器一樣。aop可以攔截包,類,方法等。
應用場景:
攔截器一般用於比如token的解析和合法性校驗。
aop一般會攔截重要業務邏輯的日誌。再比如一般自定義的註解會使用aop來實現。
-
3 # 寫程式設計師的程式碼
根據你的問題,我感覺這兩者是完全不同的感念。
攔截器(Interceptor)它依賴於web框架,在SpringMVC中就是依賴於SpringMVC框架。在實現上,基於Java的反射機制,屬於面向切面程式設計(AOP)的一種運用,就是在service或者一個方法前,呼叫一個方法,或者在方法後,呼叫一個方法,比如動態代理就是攔截器的簡單實現,在呼叫方法前打印出字串(或者做其它業務邏輯的操作),也可以在呼叫方法後打印出字串,甚至在丟擲異常的時候做業務邏輯的操作。由於攔截器是基於web框架的呼叫,因此可以使用Spring的依賴注入(DI)進行一些業務操作,同時一個攔截器例項在一個controller生命週期之內可以多次呼叫。但是缺點是隻能對controller請求進行攔截,對其他的一些比如直接訪問靜態資源的請求則沒辦法進行攔截處理。
面向切面(AOP)可以具體的攔截到方法,只能攔截Spring管理Bean的訪問(業務層Service)。 具體AOP詳情參照 Spring AOP:原理、 通知、連線點、切點、切面、表示式
實際開發中,AOP常和事務結合:Spring的事務管理:宣告式事務管理(切面)
AOP操作可以對操作進行橫向的攔截,最大的優勢在於他可以獲取執行方法的引數( ProceedingJoinPoint.getArgs() ),對方法進行統一的處理。
作用層面 攔截器只對action負責,作用層面一般位於Controller層。 Spring AOP主要是攔截對Spring管理的Bean的訪問,一般作用與Service層。聯絡 Spring AOP和攔截器一樣,都是AOP的實現方式的一種,均使用代理模式實現。區別攔截器和過濾器有點相似,是鏈式的處理模式,這樣有一個缺點就是,每次請求,都會訪問action的上下文,不夠靈活。Spring AOP的註解有@Before、@After、@AfterReturning、@AfterThrowing、@Around,可以更靈活的配置要監聽處理的Bean。
攔截器就是進入Controller控制器之前執行 攔截器用途很廣,比如可以用來進行介面許可權控制。
Aop稱為面向切面程式設計,簡而言之,就是在何時何地做什麼事,可以用於日誌,許可權檢查等