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();这里,然后一步一步地执行,然后一点一点的体会应该就懂了
记住就一点,递归调用