目录
定义 before方法-> handle()->after() 同时满足先进后出原则
模拟mvc框架 调用测试
/** * 模拟mvc框架测试 * * 框架设计时会有一些对象的定义以及这些对象的执行流程 类似一个执行链 * * 自定义拦截器方法执行顺序, 建议的 拦截器对象(很多个拦截器并发执行) */
拦截器接口
/**
* @Author pzy
* @Version 0.1.0
*
* 拦截器接口 interceptor
*/
public interface HandlerInterceptor {
//执行链开始
default void before() {
}
//执行链结束 遵守先进后出原则
default void after() {
}
}
处理器接口
/**
* @Author pzy
* @Version 0.1.0
*
* 处理器接口 controller
*/
public interface Handler {
void processed();
}
自己定义执行链
定义 before方法-> handle()->after() 同时满足先进后出原则
/**
* @Author pzy
* @Version 0.1.0
*
* 定义一个执行链
*/
public class ExecutionChain {
//一些拦截器
private List<HandlerInterceptor> interceptors = new CopyOnWriteArrayList<>();
//业务处理器
private Handler handler;
public ExecutionChain(List<HandlerInterceptor> interceptors, Handler handler) {
this.handler = handler;
this.interceptors.addAll(interceptors);
}
public void execute() {//负责执行业务的方法(例如处理请求)
//1.先执行拦截器后执行控制器
for (int i = 0; i < interceptors.size(); i++) {
interceptors.get(i).before();
}
handler.processed();//aop中使用过
//after方法
for (int i = interceptors.size() - 1; i >= 0; i--) {
interceptors.get(i).after();
}
//先进后出
}
}
测试调用流程
//TODO =================> 设计 框架执行逻辑 ====================>
public class SpringFrameworkOpen {
public static void main(String[] args) {
HandlerInterceptor handlerInterceptor01 = new HandlerInterceptor() {
@Override
public void after() {
System.out.println("我是after1");
}
@Override
public void before() {
System.out.println("我是before1");
}
};
HandlerInterceptor handlerInterceptor02 = new HandlerInterceptor() {
@Override
public void after() {
System.out.println("我是after2");
}
@Override
public void before() {
System.out.println("我是before2");
}
};
List<HandlerInterceptor> list = new CopyOnWriteArrayList<>();
list.add(handlerInterceptor01);
list.add(handlerInterceptor02);
Handler handler = () -> System.out.println("我是handler");
//最重要的一步
ExecutionChain chain = new ExecutionChain(list, handler);
chain.execute();
}
}
测试结果:
我是before1
我是before2
我是handler
我是after2
我是after1
写在一起的代码整合(下面有代码哟...)
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
//拦截器接口 interceptor
interface HandlerInterceptor {
//执行链开始
default void before() {}
//执行链结束 遵守先进后出原则
default void after() {
}
}//处理器接口 controller
interface Handler {
void processed();
}//定义一个执行链
class ExecutionChain {
//一些拦截器
private List<HandlerInterceptor> interceptors = new CopyOnWriteArrayList<>();
//业务处理器
private Handler handler;public ExecutionChain(List<HandlerInterceptor> interceptors, Handler handler) {
this.handler = handler;
this.interceptors.addAll(interceptors);
}//TODO =================> 设计 框架执行逻辑 ====================>
public void execute() {//负责执行业务的方法(例如处理请求)
//1.先执行拦截器后执行控制器
for (int i = 0; i < interceptors.size(); i++) {
interceptors.get(i).before();
}
handler.processed();//aop中使用过
//after方法
for (int i = interceptors.size() - 1; i >= 0; i--) {
interceptors.get(i).after();
}
//先进后出
}
}public class SpringFrameworkAll{
public static void main(String[] args) {
HandlerInterceptor handlerInterceptor01 = new HandlerInterceptor() {
@Override
public void after() {
System.out.println("我是after1");
}
@Override
public void before() {
System.out.println("我是before1");
}
};
HandlerInterceptor handlerInterceptor02 = new HandlerInterceptor() {
@Override
public void after() {
System.out.println("我是after2");
}
@Override
public void before() {
System.out.println("我是before2");
}
};
List<HandlerInterceptor> list = new CopyOnWriteArrayList<>();
list.add(handlerInterceptor01);
list.add(handlerInterceptor02);
Handler handler = () -> System.out.println("我是handler");ExecutionChain chain = new ExecutionChain(list, handler);
chain.execute();
}
}