Main.java
/** * 书本:【struts2】 * 功能:模拟拦截器的工作,实际就是递归的思想 * 文件:Main.java * 时间:2014年11月9日20:04:55 * 作者:cutter_point */ public class Main { public static void main(String [] args) { new ActionInvocation().invoke(); } }
ActionInvocation.java
/** * 书本:【struts2】 * 功能:模拟拦截器的工作 * 文件:ActionInvocation.java * 时间:2014年11月9日20:04:55 * 作者:cutter_point */ import java.util.ArrayList; import java.util.List; public class ActionInvocation { List<Interceptor> interceptors=new ArrayList<Interceptor>(); int index = -1; //来指示循环到了第几个interceptor了 Action a = new Action(); public ActionInvocation() //构造函数 { this.interceptors.add(new FirstInterceptor()); this.interceptors.add(new SecondInterceptor()); } public void invoke() { index ++; if(index >= this.interceptors.size()) { a.execute(); } else { this.interceptors.get(index).intercept(this); } } }
Interceptor.java
/** * 书本:【struts2】 * 功能:模拟拦截器的工作 * 文件:Interceptor.java * 时间:2014年11月9日20:04:55 * 作者:cutter_point */ public interface Interceptor { public void intercept(ActionInvocation invocation); }
FirstInterceptor.java
/** * 书本:【struts2】 * 功能:模拟拦截器的工作 * 文件:FirstInterceptor.java * 时间:2014年11月9日20:04:55 * 作者:cutter_point */ public class FirstInterceptor implements Interceptor { public void intercept(ActionInvocation invocation) { System.out.println(1); invocation.invoke(); System.out.println(-1); } }
SecondInterceptor.java
/** * 书本:【struts2】 * 功能:模拟拦截器的工作 * 文件:SecondInterceptor.java * 时间:2014年11月9日20:04:55 * 作者:cutter_point */ public class SecondInterceptor implements Interceptor { public void intercept(ActionInvocation invocation) { System.out.println(2); invocation.invoke(); System.out.println(-2); } }
Action.java
/** * 书本:【struts2】 * 功能:模拟拦截器的工作 * 文件:Action.java * 时间:2014年11月9日20:04:55 * 作者:cutter_point */ public class Action { public void execute() { System.out.println("execute!"); } }
struts2的拦截器说白了就是几个递归调用,这里代码可以执行以下,可以吧断点设置在new ActionInvocation().invoke();这里,然后一步一步地执行,然后一点一点的体会应该就懂了
记住就一点,递归调用
时间: 2024-10-13 05:38:21