模拟filter过程
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
/**
* @Author pzy
* @Version 0.1.0
* 模拟过滤器方法演示
* <p>
* 特殊的拦截器作用
*/
interface Filter {
boolean invoke();
}
interface Servlet {
void dispatch();
}
class FilterChain {
public List<Filter> filters = new CopyOnWriteArrayList<>();//过滤器(请求数据过滤)
private Servlet servlet;//控制器(例子: DispatcherServlet)
public FilterChain(List<Filter> filters, Servlet servlet) {
this.filters.addAll(filters);
this.servlet = servlet;
}
public void doFilter() {//执行过滤链
for (int i = 0; i < filters.size(); i++) {
if (!filters.get(i).invoke()) {
return;
}
}
servlet.dispatch();
}
}
public class FilterChainTests {
public static void main(String[] args) {
Filter filter01 = () -> {
System.out.println("filter--->01");
return true;
};
Filter filter02 = () -> {
System.out.println("filter------>02");
return true;
};
Servlet servlet = () -> System.out.println("servlet-------->start others");
List<Filter> listAll = new CopyOnWriteArrayList<>();
listAll.add(filter01);
listAll.add(filter02);
FilterChain filterChain = new FilterChain(listAll, servlet);
filterChain.doFilter();
}
}
之前的一个笔记,现在重新整理一下