文章永久连接:https://tech.souyunku.com/8338
Interceptor 可以对方法进行拦截,并提供机会在方法的前后添加切面代码,实现 AOP 的 核心目标。Interceptor 接口仅仅定了一个方法 void intercept(Invocation inv)。以下是简单的示例:
public class DemoInterceptor implements Interceptor {
    public void intercept(Invocation inv) { System.out.println("Before method invoking"); inv.invoke();
    System.out.println("After method invoking");
    }
}
以上代码中的 DemoInterceptor 将拦截目标方法,并且在目标方法调用前后向控制台输出 文本。inv.invoke()这一行代码是对目标方法的调用,在这一行代码的前后插入切面代码可以很 方便地实现 AOP。
nvocation 作为 Interceptor 接口 intercept 方法中的唯一参数,提供了很多便利的方法在拦 截器中使用。以下为 Invocation 中的方法:
| 
 方法  | 
 描述  | 
| 
 void invoke()  | 
 传递本次调用,调用剩下的拦截器与目标方法  | 
| 
 Controller getController()  | 
 获取 Action 调用的 Controller 对象(仅用于控制层拦截)  | 
| 
 String getActionKey()  | 
 获取 Action 调用的 action key 值(仅用于控制层拦截)  | 
| 
 String getControllerKey()  | 
 获取 Action 调用的 controller key 值(仅用于控制层拦截)  | 
| 
 String getViewPath()  | 
 获取 Action 调用的视图路径(仅用于控制层拦截)  | 
| 
 <T> T getTarget()  | 
 获取被拦截方法所属的对象  | 
| 
 Method getMethod()  | 
 获取被拦截方法的 Method 对象  | 
| 
 String getMethodName()  | 
 获取被拦截方法的方法名  | 
| 
 Object[] getArgs()  | 
 获取被拦截方法的所有参数值  | 
| 
 Object getArg(int)  | 
 获取被拦截方法指定序号的参数值  | 
| 
 <T> T getReturnValue()  | 
 获取被拦截方法的返回值  | 
| 
 void setArg(int)  | 
 设置被拦截方法指定序号的参数值  | 
| 
 void setReturnValue(Object)  | 
 设置被拦截方法的返回值  | 
| 
 boolean isActionInvocation()  | 
 判断是否为 Action 调用,也即是否为控制层拦截  |