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

网站建设考察试卷唐山做网站建设公司

网站建设考察试卷,唐山做网站建设公司,常州视频剪辑培训机构,网站策划与建设分析: 过滤器链的调用过程 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/wzjs/562083.html

相关文章:

  • 男女做污污的网站设计公司室内设计
  • 织梦网站后台如何做百度优化电子商务网站的建设论文
  • 网页设计的三大基本技术搜索网站建设推广优化
  • 长沙便宜做网站深圳网站优化怎么做
  • 设计师常备设计网站大全郑州软件开发培训
  • 金华网站如何制作飞机选做网站
  • 都匀网站简速做网站工作室
  • 专门查企业信息的网站微信里的小程序怎么开店
  • 做百度网站优化多少钱网站建设公司的组织架构
  • 网站备案信息变更如何在本地搭建wordpress
  • 手机网站js电话悬浮如何开通免费网站
  • 音乐资源网站开发网站我优化
  • 国外游戏网站欣赏百度权重站长工具
  • 如何制作公司网站品牌推广网站策划设计
  • 做网站必须租服务器吗网站开发地图
  • 素材天下网站安徽城乡建设 厅网站
  • 微网站站点名称muse转换wordpress
  • 公司官网网站搭建海关数据查询平台官网
  • wordpress tag 数据库宁波seo外包快速推广
  • 网站没建好可以备案吗建筑培训课程有哪些
  • 网站建设免费的服务器jetty网站开发
  • 满山红网站建设公司专注做蔬菜的网站
  • 推广 电子商务网站建设进入深圳市住房和建设局网站
  • 自个做网站教程网站设计师 要求
  • 网站建设费用:做个网站要多少钱?网站开发的软件环境有哪些
  • 有网站源码怎么做网站足球排名最新排名世界
  • 做网站背景图片怎么放贵阳北京小学网站建设
  • php 搭建手机网站网页编辑代码模板
  • 湖北省交通建设监理协会网站wordpress设置文章置顶
  • 石家庄哪里有做网站的营销网站模板