首页 > 代码库 > 【struts2】拦截器的工作模拟实现

【struts2】拦截器的工作模拟实现

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

记住就一点,递归调用


【struts2】拦截器的工作模拟实现