filterconfig(Java 设计模式之责任链模式实现的几种方式)

你知道的Java 设计模式之责任链模式实现的几种方式有哪些嘛? 一、servlet中的Filter servlet中分别定义了一个 Filter和FilterChain的接口,核心代码如下:public final class ApplicationFil...

你知道的Java 设计模式之责任链模式实现的几种方式有哪些嘛?

一、servlet中的Filter

servlet中分别定义了一个 Filter和FilterChain的接口,核心代码如下:

public final class ApplicationFilterChain implements FilterChain { private int pos = 0; //当前执行filter的offset private int n; //当前filter的数量 private ApplicationFilterConfig[] filters; //filter配置类,通过getFilter()方法获取Filter private Servlet servlet @Override public void doFilter(ServletRequest request, ServletResponse response) { if (pos < n) { ApplicationFilterConfig filterConfig = filters[pos++]; Filter filter = filterConfig.getFilter(); filter.doFilter(request, response, this); } else { // filter都处理完毕后,执行servlet servlet.service(request, response); } } }Java 设计模式之责任链模式实现的几种方式

二、Dubbo中的Filter

Dubbo在创建Filter的时候是另外一个方法,通过把Filter封装成 Invoker的匿名类,通过链表这样的数据结构来完成责任链,核心代码如下:

private static <T> Invoker<T> buildInvokerChain(final Invoker<T> invoker, String key, String group) { Invoker<T> last = invoker; //只获取满足条件的Filter List<Filter> filters = ExtensionLoader.getExtensionLoader(Filter.class).getActivateExtension(invoker.getUrl(), key, group); if (filters.size() > 0) { for (int i = filters.size() - 1; i >= 0; i --) { final Filter filter = filters.get(i); final Invoker<T> next = last; last = new Invoker<T>() { ... public Result invoke(Invocation invocation) throws RpcException { return filter.invoke(next, invocation); } ... }; } } return last;}

关注:(/网站:浙江优就业)查看更多IT培训学习内容,另外,新媒体营销视频课程限时免费送,在后台回复“送课”,即可免费领取

免责声明:内容和图片源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

↓↓↓

  • 发表于 2022-10-30 12:26:16
  • 阅读 ( 121 )
  • 分类:科技

0 条评论

请先 登录 后评论
小女同学的
小女同学的

440 篇文章

你可能感兴趣的文章

相关问题