源码解析

在javaWeb应用开发中,FilterChain是职责链(过滤器)模式的典型应用,以下是Filter的模拟实现分析:

Request.java

package com.itheima.pattern.responsibility.jdk;/*** @version v1.0* @ClassName: Request* @Description: TODO(一句话描述该类的功能)* @Author: dym*/
public interface Request {
}

Response.java

package com.itheima.pattern.responsibility.jdk;/*** @version v1.0* @ClassName: Response* @Description: TODO(一句话描述该类的功能)* @Author: dym*/
public interface Response {
}

Filter.java

package com.itheima.pattern.responsibility.jdk;/*** @version v1.0* @ClassName: Filter* @Description: TODO(一句话描述该类的功能)* @Author: dym*/
public interface Filter {public void doFilter(Request req,Response res,FilterChain c);
}

FilterChain.java

package com.itheima.pattern.responsibility.jdk;import java.util.ArrayList;
import java.util.List;/*** @version v1.0* @ClassName: FilterChain* @Description: TODO(一句话描述该类的功能)* @Author: dym*/
public class FilterChain { //过滤器链private List<Filter> filters = new ArrayList<Filter>();private int index = 0;// 链式调用public FilterChain addFilter(Filter filter) {this.filters.add(filter);return this;}public void doFilter(Request request, Response response) {if (index == filters.size()) {return;}Filter filter = filters.get(index);index++;filter.doFilter(request, response, this);}
}

FirstFilter.java

package com.itheima.pattern.responsibility.jdk;/*** @version v1.0* @ClassName: FirstFilter* @Description: TODO(一句话描述该类的功能)* @Author: dym*/
public class FirstFilter implements Filter {public void doFilter(Request req, Response res, FilterChain chain) {System.out.println("过滤器1 前置处理");// 先执行所有request再倒序执行所有responsechain.doFilter(req, res);System.out.println("过滤器1 后置处理");}
}

SecondFilter.java

package com.itheima.pattern.responsibility.jdk;/*** @version v1.0* @ClassName: FirstFilter* @Description: TODO(一句话描述该类的功能)* @Author: dym*/
public class SecondFilter implements Filter {public void doFilter(Request req, Response res, FilterChain chain) {System.out.println("过滤器2 前置处理");// 先执行所有request再倒序执行所有responsechain.doFilter(req, res);System.out.println("过滤器2 后置处理");}
}

Client.java

package com.itheima.pattern.responsibility.jdk;/*** @version v1.0* @ClassName: Client* @Description: TODO(一句话描述该类的功能)* @Author: dym*/
public class Client {public static void main(String[] args) {Request  req = null;Response res = null ;FilterChain filterChain = new FilterChain();filterChain.addFilter(new FirstFilter()).addFilter(new SecondFilter());filterChain.doFilter(req,res);}
}

源码解析——FilterChain是职责链(过滤器)模式的典型应用相关推荐

  1. Python源码解析:内存管理(DEBUG模式)的几个理解点

    写了这多贴子,顺带写点自己的感想吧!其实很多贴子在写的时候很踌躇,比如这次打算写的python内存管理,因为内存管理都比较琐碎,在软件架构里,也是很容易出问题的地方,涉及的细节内容非常多,要写好写明白 ...

  2. OkHttp3源码解析(三)——连接池复用

    OKHttp3源码解析系列 OkHttp3源码解析(一)之请求流程 OkHttp3源码解析(二)--拦截器链和缓存策略 本文基于OkHttp3的3.11.0版本 implementation 'com ...

  3. JavaWeb三大组件之一——Filter过滤器源码解析(全面手撕Filter源码,需要耐心看完)

    什么是Filter? 本文所说的Filter是JavaWeb中常见常使用的过滤器.Filter的作用是拦截前端发送给后端的请求,一般是用于权限过滤.日志记录.图片转换.加密.数据压缩等操作. 大致流程 ...

  4. Spring 源码解析 -- SpringWeb过滤器Filter解析

    简介 在上几篇文章中探索了请求处理相关的代码,本篇开始探索请求处理前的一些操作代码,如Filter.本篇探索Filter初始化.请求处理等相关代码. 前言 说先简单的定义相关的测试代码: 启动类: i ...

  5. gateway 过滤器执行顺序_Gateway网关源码解析—路由(1.1)之RouteDefinitionLocator一览...

    一.概述 本文主要对 路由定义定位器 RouteDefinitionLocator 做整体的认识. 在 <Spring-Cloud-Gateway 源码解析 -- 网关初始化> 中,我们看 ...

  6. Spring AOP源码解析-拦截器链的执行过程

    一.简介 在前面的两篇文章中,分别介绍了 Spring AOP 是如何为目标 bean 筛选合适的通知器,以及如何创建代理对象的过程.现在得到了 bean 的代理对象,且通知也以合适的方式插在了目标方 ...

  7. Tomcat源码解析五:Tomcat请求处理过程

    前面已经分析完了Tomcat的启动和关闭过程,本篇就来接着分析一下Tomcat中请求的处理过程. 在开始本文之前,咋们首先来看看一个Http请求处理的过程,一般情况下是浏览器发送http请求-> ...

  8. Netty 源码解析系列-服务端启动流程解析

    netty源码解析系列 Netty 源码解析系列-服务端启动流程解析 Netty 源码解析系列-客户端连接接入及读I/O解析 五分钟就能看懂pipeline模型 -Netty 源码解析 1.服务端启动 ...

  9. spring boot 源码解析23-actuate使用及EndPoint解析

    前言 spring boot 中有个很诱人的组件–actuator,可以对spring boot应用做监控,只需在pom文件中加入如下配置即可: <dependency><group ...

最新文章

  1. 在idea项目中的android包不能识别_项目调试编译和部署运行
  2. windows的阻塞和非阻塞Socket编程
  3. 一天学完spark的Scala基础语法教程七、数组(idea版本)
  4. Android Canvas 图形绘制
  5. Oracle中的move命令
  6. Chrome安装路径
  7. python echo服务器_python常用框架 echo server 的测试
  8. 【渝粤教育】国家开放大学2018年春季 0043-22T计算机文化 参考试题
  9. 远控免杀专题(17)-Python-Rootkit免杀
  10. 知识点总结vector创建二维数组
  11. sql 系统函数取表基本信息
  12. 计算机网络 --- 数据链路层介质访问控制
  13. 字符串lcfirst解析
  14. Android接口测试工具Apizza,自定义API请求返回值,自定义请求相对路径
  15. 8.计蒜客ACM题库.A2019 Save the Room
  16. PHP在线pdf电子合同生成,pdf添加水印
  17. 计算机网络未识别网络,电脑网络连接出现未识别的网络怎么办
  18. 全球首次互联网8K直播,阿里工程师如何实现?
  19. 数据分析python面试题_10道Python常见面试题
  20. 深度推荐模型-NFM

热门文章

  1. 景兴纸业和机器人概念_机器人相关股票有哪些?机器人概念股票龙头一览
  2. 前端Reract面试题-------总结(经典)
  3. appcode创建CodeSnippets像xcode那样的自定义代码片段和导出方法
  4. 远航汽车:坚持合作共赢经营理念 携手志同道合者共创美好未来
  5. 利用 exploit-db 交叉编译 shellcode
  6. 5G电源能源行业的变化
  7. Home Page - Yorhom's Game Box
  8. 推开混合云市场大门,Lenovo xCloud的破局之道
  9. 南京观海微电子---残影原理和调试方法简介
  10. facebook人脸照片_如何在手机上保留Facebook照片的本地副本