有关于Struts2的拦截器的原理
在此共设置了两个拦截器,firstInterception、SecondInterception
package struts2_inteception; public class firstInterception implements Interception{
public void interceptor(ActionInvocaton invocation){
System.out.println("-1");
invocation.invoke();
System.out.println("1"); }
}
package struts2_inteception; public class SecondInterception2 implements Interception{
public void interceptor(ActionInvocaton invocation){
System.out.println("-2");
invocation.invoke();
System.out.println("2"); }
}
主函数Main类
package struts2_inteception; public class Main {
public static void main(String []args){
new ActionInvocaton().invoke();
} }
拦截器接口Interceptor
package struts2_inteception; public interface Interception {
public void interceptor(ActionInvocaton actionInvocaton);
}
一个模拟struts2的Action类
package struts2_inteception; public class Action {
public void execute(){
System.out.println("execute()方法的执行");
} }
一个ActionInvocation类,
package struts2_inteception; import java.util.List;
import java.util.ArrayList; public class ActionInvocaton {
int index=-1;
Action action=new Action();
List<Interception> interceptions=new ArrayList<Interception>();
public ActionInvocaton(){
//在此调用一系列的拦截器
this.interceptions.add(new firstInterception());
this.interceptions.add(new SecondInterception2());
}
public void invoke(){
index++;
if (index>=interceptions.size()){
//调用action的方法
action.execute();
}else{
//调用拦截器中加的东西
this.interceptions.get(index).interceptor(this);
} } }
真正的struts2的拦截器执行过程如下:
执行的结果如下:
-1
-2
execute()方法的执行
2
1