spring拦截器及spring aop类似实现demo:
public interface Interceptor {
String intercept(ActionInvocation invocation);
}
public class TranscationInterceptor implements Interceptor {
@Override
public String intercept(ActionInvocation invocation) {
System.out.println("I'm transcationInterceptor Before");
String result = invocation.invoke();
System.out.println("I'm transcationInterceptor after");
return result;
}
}
public class ParameterInterceptor implements Interceptor {
@Override
public String intercept(ActionInvocation invocation) {
System.out.println("I'm parameterInterceptor Before");
String result = invocation.invoke();
System.out.println("I'm parameterInterceptor after");
return result;
}
}
public class ActionInvocation {
private Iterator<Interceptor> interceptors;
public String invoke(){
String result = "default";
if( interceptors.hasNext() ){
Interceptor interceptor = interceptors.next();
result = interceptor.intercept(ActionInvocation.this);
}else{
result = invokeActionOnly();
}
return result;
}
public String invokeActionOnly(){
System.out.println("I'm action!");
return "action";
}
public void setInterceptors(Iterator<Interceptor> interceptors) {
this.interceptors = interceptors;
}
}
public class TestMain {
public static void main(String[] args) {
List<Interceptor> interceptors = new ArrayList<Interceptor>();
Interceptor parameterInterceptor = new ParameterInterceptor();
Interceptor transcationInterceptor = new TranscationInterceptor();
interceptors.add(transcationInterceptor);
interceptors.add(parameterInterceptor);
ActionInvocation actionInvocation = new ActionInvocation();
actionInvocation.setInterceptors(interceptors.iterator());
String result = actionInvocation.invoke();
System.out.println(result);
}
}