官方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文件的解析了。