前言
一、包圍圈和流程圖
攔截器.png
image.png
二傲诵、Filter說明
package javax.servlet;
import java.io.IOException;
public interface Filter {
default void init(FilterConfig filterConfig) throws ServletException {
}
// 可以看到Filter是在servlet包里面的
// web請求是從這個地方進來的凯砍,所以請求會先經(jīng)過filter處理
// 這個方法有三個參數(shù)
// ServletRequest 請求信息
// ServletResponse 響應(yīng)信息
// FilterChain攔截鏈
// 請求進入到doFilter方法中時,方法可以處理請求拴竹,返回結(jié)果果覆,然后再將他們丟入到攔截鏈中
// 攔截鏈中是具備了request和reponse的內(nèi)容的,所以內(nèi)層的方法也是可以處理請求和響應(yīng)的
void doFilter(ServletRequest var1, ServletResponse var2, FilterChain var3) throws IOException, ServletException;
default void destroy() {
}
}
三殖熟、HandlerInterceptor說明
package org.springframework.web.servlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.lang.Nullable;
import org.springframework.web.method.HandlerMethod;
// 該攔截器在webMvc的包中
// 它和Filter有明顯的不一樣局待,這里是HttpServletRequest和HttpServletResponse
// 而Filter中ServletRequest和ServletResponse
// 因此這個攔截器指向處理HTTP請求
public interface HandlerInterceptor {
// 方法名為preHandle,顧名思義是在處理方法之前執(zhí)行的邏輯
// 看接口參數(shù),包含了請求和響應(yīng)钳榨,所以它可以處理請求和響應(yīng)
// 因此功能上來說其實和Filter差不多
// 其次它還多了handler參數(shù)舰罚,可以傳入handler處理業(yè)務(wù)
// 它的返回結(jié)果如果是false,就表示不執(zhí)行后面的邏輯了薛耻,表示任務(wù)處理到它這里就完成了
default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
return true;
}
// 方法名為postHandle营罢,顧名思義它是一個后置處理器
// HandlerInterceptor實例在攔截鏈的越前面,postHandle就在越后面執(zhí)行
// 其他的方面和preHandler差不多
default void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
@Nullable ModelAndView modelAndView) throws Exception {
}
// 這個方法用在request處理完成之后饼齿,這樣就可以做一些收尾工作
// 但是它還是沒有逃離Filter的包圍饲漾,它還在Filter包圍圈內(nèi)部
default void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,
@Nullable Exception ex) throws Exception {
}
}
四、AOP說明
AOP實際上也是攔截器缕溉,采用了動態(tài)代理的模式考传,會有JDK代理和cglib兩種形式,AOP注解主要放在方法和類上面证鸥,從它的放置位置可以知道僚楞,它的處理對象是實際處理業(yè)務(wù)的方法(Controller中的方法或者Controller下一層的業(yè)務(wù)處理方法等),即它更加貼近我們具體的業(yè)務(wù)枉层。
要詳細了解AOP處理流程泉褐,可以查看我的另外一篇關(guān)于AOP原理的文章