Spring XML 自定义标签解析

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/quan20111992/article/details/87902286

在使用dubbo时常常会遇到如下配置:

<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
       xmlns="http://www.springframework.org/schema/beans"
       xsi:schemaLocation="http://www.springframework.org/schema/beans 
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://dubbo.apache.org/schema/dubbo
       http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
    
    <dubbo:reference id="demoService" check="false" interface="org.apache.dubbo.samples.basic.api.DemoService"/>
</beans>

以上配置截取自dubbo官网

<dubbo:reference />是dubbo自定义的标签,这些标签是如何转换成Spring Bean对象的呢?

在dubbo.jar的META-INF目录下有两个文件spring.schemasspring.handlers
2.7.0 版本中的spring.schemas文件内容如下:

http\://dubbo.apache.org/schema/dubbo/dubbo.xsd=META-INF/dubbo.xsd
http\://code.alibabatech.com/schema/dubbo/dubbo.xsd=META-INF/compat/dubbo.xsd

内容格式为 key-value,key为dubbo的schema文件,value表示该文件的实际路径
在配置文件中引入dubbo标签时需要指定具体的schema文件,其值就是key
在这里插入图片描述
2.7.0 版本中的spring.handlers文件内容如下:

http\://dubbo.apache.org/schema/dubbo=org.apache.dubbo.config.spring.schema.DubboNamespaceHandler
http\://code.alibabatech.com/schema/dubbo=org.apache.dubbo.config.spring.schema.DubboNamespaceHandler

文件内容格式为key-value,key为dubbo的命名空间,value为该命名空间对应的处理逻辑类
在配置文件中引入dubbo标签时需要指定dubbo命名空间,其值就是key
在这里插入图片描述
根据http\://dubbo.apache.org/schema/dubbo=org.apache.dubbo.config.spring.schema.DubboNamespaceHandler可知,dubbo标签的解析入口就是DubboNamespaceHandler.java
在这里插入图片描述
DubboNamespaceHandler.init()中注册标签对应的BeanDefinitionParser

    public void init() {
        // ...
        this.registerBeanDefinitionParser("service", new DubboBeanDefinitionParser(ServiceBean.class, true));
        this.registerBeanDefinitionParser("reference", new DubboBeanDefinitionParser(ReferenceBean.class, false));
		// ...
    }

看到这里我们知道dubbo标签的解析逻辑在DubboBeanDefinitionParser
在这里插入图片描述
调用BeanDefinitionParser接口中的parse方法创建BeanDefinition对象

官方文档:9.2. XML Schema Authoring

猜你喜欢

转载自blog.csdn.net/quan20111992/article/details/87902286