既然我们研究的是拦截器那么我们先写一个action和拦截器试试。
package inter; public class FindNameAction { public void execute(){ System.out.println("find name!"); } }
action没有继承任何接口,就只有一个execute。
package inter; public interface Interceptor { void intercept(ActionInvocation invocation); } package inter; public class FirstInterceptor implements Interceptor{ @Override public void intercept(ActionInvocation invocation) { // TODO Auto-generated method stub System.out.println(1); invocation.invoke(); System.out.println(-1); } } package inter; public class SecondInterceptor implements Interceptor{ @Override public void intercept(ActionInvocation invocation) { // TODO Auto-generated method stub System.out.println(2); invocation.invoke(); System.out.println(-2); } }很简单吧 定义一个拦截器要实现的接口,然后有两个具体的拦截器。如果说代码里真有什么难懂的,就应该是ActionInvocaton了。别急,慢慢来。
package inter; import java.util.ArrayList; import java.util.List; public class ActionInvocation { List<Interceptor> interceptors=new ArrayList<Interceptor>(); FindNameAction action=new FindNameAction(); int index=-1; public ActionInvocation() { // TODO Auto-generated constructor stub interceptors.add(new FirstInterceptor()); interceptors.add(new SecondInterceptor()); } public void invoke(){ index++; if (index<=interceptors.size()-1) interceptors.get(index).intercept(this); else action.execute(); } }就像上面说的,ActionInvocation里面有两个变量。一个放置了所有的拦截器,一个是我们最终操作的action。
package inter; public class Test { public static void main(String[] args) { new ActionInvocation().invoke(); } }
下一节 我们看看源码