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

中山精品网站建设精英汕头seo托管

中山精品网站建设精英,汕头seo托管,php 企业网站开发教程,惠州城乡和住房建设局网站分析: 过滤器链的调用过程 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.cadmedia.cn/news/13931.html

相关文章:

  • 专业网站开发报价优帮云排名优化
  • 建设网站代码凡科建站怎么样
  • 武隆网站建设哪家好重庆seo公司
  • 网站建设 博采网络谷歌在线搜索
  • 企业网站建设项目描述google seo教程
  • 福田网站开发新闻源
  • 内蒙古建设厅官方网站app注册推广任务平台
  • 哈尔滨企业建站模板产品推广平台有哪些
  • 企业网站建设 安全百度广告电话号码是多少
  • 网站建设项目策划书模板范文免费建立个人网站
  • html5网页制作实例代码霸榜seo
  • 非遗网站建设目的网络营销试卷
  • termux安装wordpress谷歌seo站内优化
  • 外贸网站怎么找客户邯郸seo
  • 网站开发培训网房地产十大营销手段
  • 网站免费建站o网页广告调词平台多少钱
  • 深圳品牌网站建设公司哪家好国家免费职业培训平台
  • 沈阳做网站开发公司网站seo外包靠谱吗
  • 网站个人主页模板线下推广都有什么方式
  • 深圳互联网公司招聘网站建设加推广优化
  • 网站建设责任分解成都新闻最新消息
  • 人民政府网站的信息资源建设惠州关键词排名优化
  • 点石嘉业北京网站建设公司微信小程序开发费用
  • 网站栏目名称大全免费网站免费
  • 高校 网站建设实施方案网络优化培训要多少钱
  • 搜狗网站优化软件百度云盘登录
  • 搜狐快站官网app推广赚钱平台
  • 学校网站建设的意义的主要负责人夸克搜索引擎入口
  • 商务网站建设的应用今日新闻联播主要内容摘抄
  • 教育加盟培训网站建设网上代写文章一般多少钱