一。使用 Schema 方式使得 spring 更加便于与第三方进行集成以及第三方可以提供更
简单更便于使用的个性化配置方式。 Schema 中有个重要的概念命名空间(namespace)必须要提一下,
spring 就是利用它来做第三方自定配置格式的解析的,在 spring 中 aop,
transaction的就是给第三一个实现自己自定义配置很好实例。
xml中各命名空间下的格式定义文件通过 xsi:schemaLocation 来指定。
二。本文档不是讲解 spring 的,所以下面只是简略的来讲解 spring 如果通过 schema
方式来解析配置文件的。类 DefaultBeanDefinitionDocumentReader 会把
spring 的 xml 配置文件当做一个文档格式来读取
每读取一个元素节点都会判断下这个元素的命名空间,如果是默认命名空间
( http://www.springframework.org/schema/beans)则按默认方式读取 bean
的定义, 如果不是如 namespaceUri 如下http://code.alibabatech.com/schema/dubbo
则 走解析自定义元素流程。根据命名空间去获取具体的处理器NamespaceHandler
DefaultNamespaceHandlerResolver 类传了 key 为 namespaceUri, 在类中有个
Map 存储类所有的自定义 NamespaceHandler, 这个 Map 中的值是通过工具类
PropertiesLoaderUtils 加载所有在”META-INF/spring.handlers” 中的值
三。此文档主要讲解 dubbo 的自定义处理器 DubboNamespaceHandler 来怎样把 dubbo
自定义的元素转换成的 bean 定义并注册到 spring 的容器中去的
DubboNamespaceHandler 中注册了这么多的 BeanDefinitionParser 用来解析
dubbo 定义的那些 xml 元素节点及各个 BeanDefinitionParser 会把上面的 xml 元素转换成
spring 内部的数据结构BeanDefinition,最终当被引用时实例化成对应的 bean
如<dubbo:application/>节点得到 ApplicationConfig