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 执行了!!!
第二个拦截器结束
第一个拦截器结束
posted on 2018-06-06 16:37 Danial7777777 阅读(114) 评论(0) 收藏 举报
浙公网安备 33010602011771号