java里的拦截器是动态拦截Action调用的对象,它提供了一种机制可以使开发者在一个Action执行的前后执行一段代码,也可以在一个Action执行前阻止其执行,同时也提供了一种可以提取Action中可重用部分代码的方式。在AOP中,拦截器用于在某个方法或者字段被访问之前,进行拦截然后再之前或者之后加入某些操作。
public interface HandlerInterceptor {
boolean preHandle(HttpServletRequest var1, HttpServletResponse var2, Object var3) throws Exception;
void postHandle(HttpServletRequest var1, HttpServletResponse var2, Object var3, ModelAndView var4) throws Exception;
void afterCompletion(HttpServletRequest var1, HttpServletResponse var2, Object var3, Exception var4) throws Exception;
}
public class HandlerInterceptorDemo implements HandlerInterceptor {
@Override
public boolean preHandle(javax.servlet.http.HttpServletRequest httpServletRequest, javax.servlet.http.HttpServletResponse httpServletResponse, Object o) throws Exception {
System.out.println("--------HandlerInterceptor.preHandle---------");
return true;
}
@Override
public void postHandle(javax.servlet.http.HttpServletRequest httpServletRequest, javax.servlet.http.HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
System.out.println("--------HandlerInterceptor.postHandle---------");
}
@Override
public void afterCompletion(javax.servlet.http.HttpServletRequest httpServletRequest, javax.servlet.http.HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
System.out.println("--------HandlerInterceptor.afterCompletion---------");
}
}
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/test"/>
<bean class="com.xzh.HandlerInterceptorDemo" />
mvc:interceptor>
mvc:interceptors>
public interface MethodInterceptor extends Interceptor {
Object invoke(MethodInvocation var1) throws Throwable;
}
@Component
public class MethodInterceptorDemo implements MethodInterceptor {
@Override
public Object invoke(MethodInvocation methodInvocation) throws Throwable {
System.out.println("-------MethodInterceptorDemo.invoke--------");
Method method = methodInvocation.getMethod();
System.out.println("-------method:"+ method.getName() + "-------");
return methodInvocation.proceed();//该方法不调用,则被拦截的方法不会被执行
}
}
<aop:config>
<aop:pointcut id="methodPoint" expression="execution(* com.xzh.*Controller.*(..)) "/>
<aop:advisor pointcut-ref="methodPoint" advice-ref="methodInterceptorDemo"/>
aop:config>