dubbo源码--如何与spring无缝对接

13 篇文章 0 订阅

官方api说明:

Dubbo 采用全 Spring 配置方式,透明化接入应用,对应用没有任何 API 侵入,只需用 Spring 加载 Dubbo 的配置即可,Dubbo 基于 Spring 的 Schema 扩展 进行加载。

在使用dubbo的时候会有两个配置文件,provider.xml和consumer.xml文件。

dubbo是怎么解析这两个xml的呢?细心的你估计看到了,这两个xml有个dubbo.xsd。

这个xsd又是怎么回事呢?用过spring的朋友估计想到spring中貌似也有xsd文件,很多框架也有自己的xsd。

既然dubbo自称于spring无风对接,那咱们就可以猜想dubbo.xsd文件跟spring中的xsd文件有关系。

那么先来聊聊spring关于schema是如何扩展的,由于官方提供的是英文版,中文版可以参考:

https://blog.csdn.net/zhengyong15984285623/article/details/60876418

在进dubbo.xsd中,可以看出dubbo的xml文件解析就是通过spring的schema进行自定义。

以上两个配置文件中=号左边(咱们成为key),这个key就是咱们在provider.xml和consumer.xml文件中

另外<dubb:registry>标签中dubbo是怎么来的?

比如说dubbo:protocol标签对应的实体类ProtocolConfig

/**
* ProtocolConfig
*
* @author william.liangf
* @export
*/
public class ProtocolConfig extends AbstractConfig {
private static final long serialVersionUID = 6913423882496634749L;
// 服务协议
private String name;
// 服务IP地址(多网卡时使用)
private String host;
// 服务端口
private Integer port;
// 上下文路径
private String contextpath;
// 线程池类型
private String threadpool;
// 线程池大小(固定大小)
private Integer threads;
// IO线程池大小(固定大小)
private Integer iothreads;
// 线程池队列大小
private Integer queues;
// 最大接收连接数
private Integer accepts;
// 协议编码
private String codec;
// 序列化方式
private String serialization;
// 字符集
private String charset;
// 最大请求数据长度
private Integer payload;
// 缓存区大小
private Integer buffer;
// 心跳间隔
private Integer heartbeat;
// 访问日志
private String accesslog;
// 网络传输方式
private String transporter;
// 信息交换方式
private String exchanger;
// 信息线程模型派发方式
private String dispatcher;
// 对称网络组网方式
private String networker;
// 服务器端实现
private String server;
// 客户端实现
private String client;
// 支持的telnet命令,多个命令用逗号分隔
private String telnet;
// 命令行提示符
private String prompt;
// status检查
private String status;
// 是否注册
private Boolean register;
// 参数
private Map<String, String> parameters;
// 是否为缺省
private Boolean isDefault;
public ProtocolConfig() {
}
public ProtocolConfig(String name) {
setName(name);
}
public ProtocolConfig(String name, int port) {
setName(name);
setPort(port);
}

里就找到了dubbo是怎么解析provider.xml和consumer.xml文件的。具体解析还是依赖于spring来做解析的

这里的registerBeanDefinitionParser()方法时父类NamespaceHandlerSupport中的

在看看方法参数BeanDefinitionParser是怎么来的

所以这里跟spring彻底的对接上了,后面就是spring进行xml文件的解析了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值