用java工程模拟拦截器的实现,通过使用拦截器在action执行前加入一些处理逻辑,在action执行后又加入一些逻辑。其代码如下:
//Action.java
package com.xie.interceptor;
public class Action {
public void execute(){
System.out.println("execute action.");
}
}
// ActionInvocation.java
package com.xie.interceptor;
import java.util.ArrayList;
import java.util.List;
public class ActionInvocation {
List<Interceptor> interceptors=new ArrayList<Interceptor>();
int index=-1;
Action action=new Action();
public ActionInvocation(){
this.interceptors.add(new FirstInterceptor());
this.interceptors.add(new SecInterceptor());
this.interceptors.add(new ThirInterceptor());
}
public void invoke(){
if (index+1>=this.interceptors.size()) {
action.execute();
}else {
index++;
this.interceptors.get(index).intercept(this);
}
}
}
// Interceptor.java
package com.xie.interceptor;
public interface Interceptor {
public void intercept(ActionInvocation invocation);
}
//Main.java
package com.xie.interceptor;
public class Main {
public static void main(String[] args) {
new ActionInvocation().invoke();
}
}
// FirstInterceptor.java
package com.xie.interceptor;
public class FirstInterceptor implements Interceptor {
@Override
public void intercept(ActionInvocation invocation) {
System.out.println(1);
invocation.invoke();
System.out.println(-1);
}
}
// SecInterceptor.java
package com.xie.interceptor;
public class SecInterceptor implements Interceptor {
@Override
public void intercept(ActionInvocation invocation) {
System.out.println(2);
invocation.invoke();
System.out.println(-2);
}
}
//ThirInterceptor.java
package com.xie.interceptor;
public class ThirInterceptor implements Interceptor{
@Override
public void intercept(ActionInvocation invocation) {
System.out.println(3);
invocation.invoke();
System.out.println(-3);
}
}