struts2拦截器执行模拟 参考马士兵老师

public class ActionProxy {

    public static void main(String[] args) {

        //模拟ActionProxy调用invoke()方法
ActionInvocation invocation=new ActionInvocation();
invocation.invoke();
}
}
public class ActionInvocation {

    //成员变量  拦截器数组,访问的action 对象
List<Interceptor> list=new ArrayList<>();
Action action=new Action();
private int index=-1; //初始化list对象,装inceptor对象
public ActionInvocation() {
FirstInterceptor firstInterceptor=new FirstInterceptor();
SecondInterceptor secondInterceptor=new SecondInterceptor();
this.list.add(firstInterceptor);
this.list.add(secondInterceptor);
} public void invoke(){
index++;
if (index>list.size()-1) {
//拦截器已经执行完,执行action
action.execute();
}else {
//调用拦截器的拦截方法
list.get(index).intercept(this);
}
} }
public interface Interceptor {

    public void intercept(ActionInvocation invocation);
}
public class FirstInterceptor implements Interceptor{

    @Override
public void intercept(ActionInvocation invocation) {
// TODO Auto-generated method stub
//前处理
System.out.println("第一个拦截器开始");
//调用invocation 的invoke方法
invocation.invoke();
//后处理
System.out.println("第一个拦截器结束");
} }
public class SecondInterceptor implements Interceptor{

    @Override
public void intercept(ActionInvocation invocation) {
// TODO Auto-generated method stub
//前处理
System.out.println("第二个拦截器开始");
//调用invocation 的invoke方法
invocation.invoke();
//后处理
System.out.println("第二个拦截器结束");
} }
public class Action {

    public void execute(){
System.out.println("action 执行了!!!");
}
}
result:
第一个拦截器开始
第二个拦截器开始
action 执行了!!!
第二个拦截器结束
第一个拦截器结束
上一篇:Go语言 数据类型,流程控制


下一篇:剑指 Offer 68 - I. 二叉搜索树的最近公共祖先