dubbo关于filter组装,extension扩展逻辑.
来源:互联网 发布:邮件淘宝客 编辑:程序博客网 时间:2024/05/16 03:35
以dubbo consuemr 的spring factory-bean ( ReferenceConfig)为例:
public class ReferenceConfig<T> extends AbstractReferenceConfig {
private static final Protocol refprotocol = ExtensionLoader.getExtensionLoader(Protocol.class).getAdaptiveExtension();}
内部返回了一个动态生成的class:
package com.alibaba.dubbo.rpc;
import com.alibaba.dubbo.common.extension.ExtensionLoader;
public class Protocol$Adpative implements com.alibaba.dubbo.rpc.Protocol {
public com.alibaba.dubbo.rpc.Exporter export(com.alibaba.dubbo.rpc.Invoker arg0) throws com.alibaba.dubbo.rpc.Invoker{
if (arg0 == null) throw new IllegalArgumentException("com.alibaba.dubbo.rpc.Invoker argument == null");
if (arg0.getUrl() == null) throw new IllegalArgumentException("com.alibaba.dubbo.rpc.Invoker argument getUrl() == null");
com.alibaba.dubbo.common.URL url = arg0.getUrl(); //
String extName = ( url.getProtocol() == null ? "dubbo" : url.getProtocol() );
if(extName == null) throw new IllegalStateException("Fail to get extension(com.alibaba.dubbo.rpc.Protocol) name from url(" + url.toString() + ") use keys([protocol])");
com.alibaba.dubbo.rpc.Protocol extension = (com.alibaba.dubbo.rpc.Protocol)ExtensionLoader.getExtensionLoader(com.alibaba.dubbo.rpc.Protocol.class).getExtension(extName);
return extension.export(arg0);
}
public int getDefaultPort() {
throw new UnsupportedOperationException("method public abstract int com.alibaba.dubbo.rpc.Protocol.getDefaultPort() of interface com.alibaba.dubbo.rpc.Protocol is not adaptive method!");
}
public void destroy() {
throw new UnsupportedOperationException("method public abstract void com.alibaba.dubbo.rpc.Protocol.destroy() of interface com.alibaba.dubbo.rpc.Protocol is not adaptive method!");
}
public com.alibaba.dubbo.rpc.Invoker refer(java.lang.Class arg0, com.alibaba.dubbo.common.URL arg1) throws java.lang.Class {
if (arg1 == null) throw new IllegalArgumentException("url == null");
com.alibaba.dubbo.common.URL url = arg1;
String extName = ( url.getProtocol() == null ? "dubbo" : url.getProtocol() );
if(extName == null) throw new IllegalStateException("Fail to get extension(com.alibaba.dubbo.rpc.Protocol) name from url(" + url.toString() + ") use keys([protocol])");
com.alibaba.dubbo.rpc.Protocol extension = (com.alibaba.dubbo.rpc.Protocol)ExtensionLoader.getExtensionLoader(com.alibaba.dubbo.rpc.Protocol.class).getExtension(extName);
return extension.refer(arg0, arg1);
}
}
附件:
代码生成逻辑如下:
0 0
- dubbo关于filter组装,extension扩展逻辑.
- dubbo extension扩展点 源代码
- dubbo学习笔记 九 dubbo-common之动态扩展extension
- dubbo 提示No such extension Filter for filter/com.alibaba.dubbo.rpc.Filter
- dubbo Filter
- php扩展之关于extension,zend_extension和zend_extension_ts
- php扩展之关于extension,zend_extension和zend_extension_ts
- 关于iOS8扩展extension自己的小总结 不一定正确
- 关于分类category与类扩展extension的区别
- php C extension扩展
- Swift扩展(Extension)
- iOS8中的Extension扩展
- iOS8中的Extension扩展
- Extension 类扩展
- iOS扩展Extension详解
- 类扩展(Extension)
- Swift 扩展(extension)
- Swift UIColor Extension (扩展)
- Android音频播放--SoundPool
- 20161115
- Android多语言系统
- 10 leetcode - Palindrome Number
- NumberFormat类简单介绍
- dubbo关于filter组装,extension扩展逻辑.
- GridView(网格视图)
- C#一个简单多线程的实例
- 图像处理--图像分割算法介绍
- 【转】iOS开发--一步步教你彻底学会『iOS应用间相互跳转』
- C++中如何定义string类?
- 使用 EMMA 获得功能测试覆盖率
- spirng 乱码
- 【HDU 1175 连连看】 + DFS + 减枝