【知识库】--dubbo SPI 动态扩展点之 buildInvokerChain 责任链 构建(267)

来源:互联网 发布:狗狗长跳蚤怎么办 知乎 编辑:程序博客网 时间:2024/05/17 20:22

分析构建责任链代码

private static <T> Invoker<T> buildInvokerChain(final Invoker<T> invoker, String key, String group) {    Invoker<T> last = invoker;    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 Class<T> getInterface() {                    return invoker.getInterface();                }                public URL getUrl() {                    return invoker.getUrl();                }                public boolean isAvailable() {                    return invoker.isAvailable();                }                public Result invoke(Invocation invocation) throws RpcException {                    return filter.invoke(next, invocation);                }                public void destroy() {                    invoker.destroy();                }                @Override                public String toString() {                    return invoker.toString();                }            };        }    }    return last;}


阅读全文
0 0
原创粉丝点击