博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
初步了解 Dubbo 初始化,加载
阅读量:5154 次
发布时间:2019-06-13

本文共 2621 字,大约阅读时间需要 8 分钟。

通过分析 dubbo demo 的spring xml 配置,初步了解 dubbo的类加载和回顾spring的加载信息

Demo

说明

XML Schema命名空间作用:  1、避免命名冲突,像Java中的package一样    2、将不同作用的标签分门别类(像Spring中的tx命名空间针对事务类的标签,context命名空间针对组件的标签,dubbo 则是dubbo服务的命名空间)

代码解释

1、xmlns="http://www.springframework.org/schema/beans"  声明xml文件默认的命名空间,表示未使用其他命名空间的所有标签的默认命名空间。    2、xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  声明XML Schema 实例,声明后就可以使用 schemaLocation 属性    3、xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"声明前缀为dubbo的命名空间,后面的URL用于标示命名空间的地址不会被解析器用于查找信息。其惟一的作用是赋予命名空间一个惟一的名称。当命名空间被定义在元素的开始标签中时,所有带有相同前缀的子元素都会与同一个命名空间相关联。    4、xsi:schemaLocation="  http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"  这个从命名可以看出个大概,指定Schema的位置这个属性必须结合命名空间使用。这个属性有两个值,第一个值表示需要使用的命名空间。第二个值表示供命名空间使用的 XML schema 的位置。  需要什么样的标签的时候,就引入什么样的命名空间和Schema。

spring 加载dubbo 的入口

在dubbo-{version}.jar 中 META-INF/spring.handlers 中可以看到http\://code.alibabatech.com/schema/dubbo=com.alibaba.dubbo.config.spring.schema.DubboNamespaceHandlerDubboNamespaceHandler 即dubbo 通过spring的handler处理类

DubboNamespaceHandler代码

public class DubboNamespaceHandler extends NamespaceHandlerSupport {    static {        Version.checkDuplicate(DubboNamespaceHandler.class);    }    public void init() {        registerBeanDefinitionParser("application", new DubboBeanDefinitionParser(ApplicationConfig.class, true));        registerBeanDefinitionParser("module", new DubboBeanDefinitionParser(ModuleConfig.class, true));        registerBeanDefinitionParser("registry", new DubboBeanDefinitionParser(RegistryConfig.class, true));        registerBeanDefinitionParser("monitor", new DubboBeanDefinitionParser(MonitorConfig.class, true));        registerBeanDefinitionParser("provider", new DubboBeanDefinitionParser(ProviderConfig.class, true));        registerBeanDefinitionParser("consumer", new DubboBeanDefinitionParser(ConsumerConfig.class, true));        registerBeanDefinitionParser("protocol", new DubboBeanDefinitionParser(ProtocolConfig.class, true));        registerBeanDefinitionParser("service", new DubboBeanDefinitionParser(ServiceBean.class, true));        registerBeanDefinitionParser("reference", new DubboBeanDefinitionParser(ReferenceBean.class, false));        registerBeanDefinitionParser("annotation", new DubboBeanDefinitionParser(AnnotationBean.class, true));    }}

上述xml 解析完后,可以大概的看做是如下spring bean 的加载

转载于:https://www.cnblogs.com/kakacbing/p/8991061.html

你可能感兴趣的文章
校门外的树2 contest 树状数组练习 T4
查看>>
面试整理:Python基础
查看>>
Python核心编程——多线程threading和队列
查看>>
Program exited with code **** 相关解释
查看>>
植物大战僵尸中文年度版
查看>>
26、linux 几个C函数,nanosleep,lstat,unlink
查看>>
投标项目的脚本练习2
查看>>
201521123107 《Java程序设计》第9周学习总结
查看>>
Caroline--chochukmo
查看>>
利用jquery的contains实现搜索功能
查看>>
iOS之文本属性Attributes的使用
查看>>
从.Net版本演变看String和StringBuilder性能之争
查看>>
Excel操作 Microsoft.Office.Interop.Excel.dll的使用
查看>>
解决Ubuntu下博通网卡驱动问题
查看>>
【bzoj2788】Festival
查看>>
执行gem install dryrun错误
查看>>
Java SE之正则表达式一:概述
查看>>
HTML5简单入门系列(四)
查看>>
实现字符串反转
查看>>
转载:《TypeScript 中文入门教程》 5、命名空间和模块
查看>>