当前位置: 首页 > news >正文

茂名建设公司网站wordpress写书typecho主题

茂名建设公司网站,wordpress写书typecho主题,网站结构是什么 怎么做,网站建设开发收费分析: 过滤器链的调用过程 A过滤器调用chain.doFilter此时会进入到下一个过滤器 B过滤器继续调用chain.doFilter会继续进入下一个过滤器 当所有过滤器都执行完成后,会进入目标方法。 既然chain.doFilter能进入下一个过滤器,那本质上就是方法的…

分析:
过滤器链的调用过程
A过滤器调用chain.doFilter此时会进入到下一个过滤器
B过滤器继续调用chain.doFilter会继续进入下一个过滤器
当所有过滤器都执行完成后,会进入目标方法。
既然chain.doFilter能进入下一个过滤器,那本质上就是方法的调用压栈和弹栈,一个方法的调用入口会执行完成所有的方法栈后才完成。
所以chain内肯定知道下一个filter是哪个,同时chain肯定保存了最终的目标执行对象。
基于以上分析,chain内部维护了一个过滤器集合,并知道下一个过滤器是哪个。

运行结果:首先,任何编程语言在调用一个方法,都会层层调用多层方法栈。ABCDE....其实,责任链设计模式无非就是通过代码解耦,将复杂的逻辑线性化。将一个一个的调用串行化。FilterChain将责任链的执行权交给每个过滤器,由过滤器决定是否执行下一个过滤器。
@Data
@Builder
public class HttpServletRequest {private String method;private String uri;}
public class TargetController {public void target() {System.out.println("执行了最终的目标方法");}}
public interface Filter {void doFilter(FilterChain filterChain, HttpServletRequest request) throws Exception;}
public class AuthFilter implements Filter {@Overridepublic void doFilter(FilterChain filterChain, HttpServletRequest request) throws Exception {System.out.println("auth filter before");filterChain.doFilter(request);System.out.println("auth filter after");}}
public class LogFilter  implements Filter{@Overridepublic void doFilter(FilterChain filterChain, HttpServletRequest request) throws Exception {System.out.println("log filter before ");filterChain.doFilter(request);System.out.println("log filter after ");}
}
@Data
@Builder
public class FilterChain {private Integer index;private List<Filter> filters;//执行最终目标方法的对象private Object target;//执行最终的目标方法private Method method;//执行最终目标方法的private Object[] args;public void doFilter(HttpServletRequest request) throws Exception {//获取当前要执行的过滤器if (index == null){index = 0;}if (filters == null || filters.size() <= 0){return;}if (index >= filters.size()){//执行最终的目标方法method.invoke(target,args);return;}//获取过滤器Filter filter = filters.get(index++);filter.doFilter(this,request);}}
public class Test {public static void main(String[] args) throws Exception {FilterChain filterChain = FilterChain.builder().filters(Arrays.asList(new AuthFilter(), new LogFilter())).index(0).target(new TargetController()).method(TargetController.class.getMethod("target")).args(null).build();filterChain.doFilter(new HttpServletRequest("GET","/test"));}}
http://www.dtcms.com/a/483103.html

相关文章:

  • 上海网站建设软件下载唐山的做网站的企业
  • 图解网络(科普版)
  • TensorFlow Implementation of Content-Based Filtering|基于内容过滤的TensorFlow实现
  • 【Pr】Adobe Premiere Pro 2025 学习笔记-01工作流实操
  • 手机端网站模板下载开发者助手app
  • 怎样做网站代理拼多多怎么开店
  • php按步骤做网站苏州企业网站建设服务中心
  • 月报 Vol.04:新增 async test 与 async fn main 语法,新增 lexmatch 表达式
  • 04--CSS基础(3)
  • C语言--函数
  • `String`、`StringBuilder` 和 `StringBuffer`区别卓望一面面试题
  • 【11408学习记录】考研英语阅读长难句得分密码:5层拆解2016真题复杂句!
  • 网站建设启示金华网站建设团队
  • 做彩票网站代理犯法吗网站建设实施计划包括
  • 第三十五篇|日本语言学校的可计算结构:神户日语学院数据建模案例
  • 数据安全工具手册——便捷实用的安全工具集-20251014
  • 网站建设网络合同网站打开出现建设中
  • 办公用品网站模板建英文网站
  • 【编号28】中国九大流域范围-shp
  • FITC-SH的化学特性及其在分子标记与表面偶联中的实验应用
  • BITFIELD命令详解
  • 无锡模板网站设计公司无锡网站建设seo
  • ⸢ 柒-Ⅳ⸥⤳ 可信纵深防御建设方案:信任链构建可信策略
  • 德阳中恒网站建设杭州网站建设品牌
  • 如何做网站系统阿里云购买网站空间
  • 广州网站建设公司哪家服务好qq网页版登录官网登录入口
  • Docker(二) 容器技术发展史
  • MacOS本地数据库搭建
  • C语言--指针
  • 怎么打开域名网站长春网站排名