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  执行了!!!
第二个拦截器结束
第一个拦截器结束

猜你喜欢

转载自www.cnblogs.com/Danial7777777/p/9145923.html