Structs2的interceptor模拟实现
1、自定义interceptor接口
public interface MyInterceptor {
public void interceptor(Invocation invocation);
}
2、拦截器1
public class FirstInterceptor implements MyInterceptor {
@Override
public void interceptor(Invocation invocation) {
System.out.println("第一次拦截开始---------");
invocation.invoke();
System.out.println("第一次拦截结束---------");
}
}
3、拦截器2
public class SecondInterceptor implements MyInterceptor {
@Override
public void interceptor(Invocation invocation) {
System.out.println("第二次拦截开始---------");
invocation.invoke();
System.out.println("第二次拦截结束---------");
}
}
4、Invocation的实现
import java.util.ArrayList;
import java.util.List;
public class Invocation {
List<MyInterceptor> interceptors = new ArrayList<MyInterceptor>();
int index = -1;
public Invocation() {
this.interceptors.add(new FirstInterceptor());
this.interceptors.add(new SecondInterceptor());
}
public void invoke() {
index++;
if (index < interceptors.size()) {
interceptors.get(index).interceptor(this);
} else {
// 拦截器拦截完毕后执行Action
new Action().execute();
}
}
}
5、模拟Action类
public class Action {
public void execute() {
System.out.println("Action 执行**********************");
}
}
6、客户端Client调用
public class Client {
public static void main(String[] args) {
new Invocation().invoke();
}
}
总结:
Structs2拦截器的实现方式类似于设计模式中的责任链模式,为了能更容易理解拦截器的原理http://787141854-qq-com.iteye.com/admin/blogs/2070819,建议先去学习一下责任链模式。