有关于Struts2的拦截器的原理

在此共设置了两个拦截器,firstInterception、SecondInterception

 1 package struts2_inteception;
 2 
 3 public class firstInterception implements Interception{
 4     public void interceptor(ActionInvocaton invocation){
 5         System.out.println("-1");
 6         invocation.invoke();
 7         System.out.println("1");
 8         
 9     }
10 }
 1 package struts2_inteception;
 2 
 3 public class SecondInterception2 implements Interception{
 4     public void interceptor(ActionInvocaton invocation){
 5         System.out.println("-2");
 6         invocation.invoke();
 7         System.out.println("2");
 8         
 9     }
10 }

主函数Main类

1 package struts2_inteception;
2 
3 public class Main {
4     public static void main(String []args){
5         new ActionInvocaton().invoke();
6     }
7 
8 }

拦截器接口Interceptor

1 package struts2_inteception;
2 
3 public interface Interception {
4     public void interceptor(ActionInvocaton actionInvocaton);
5 }

一个模拟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

猜你喜欢

转载自blog.csdn.net/itxiaobaibai/article/details/79939560
今日推荐