3.1 dubbo-加载配置文件

本文详细介绍了Dubbo配置文件的加载过程,包括自定义标签的设置、BeanDefinition的实例化以及Dubbo标签的解析。重点讲解了Dubbo在Spring中如何处理自定义标签,如`dubbo:application`、`dubbo:reference`,并通过BeanDefinitionParser和NamespaceHandler将标签内容转换为Bean。文章还探讨了加载`META-INF/spring.handlers`文件以获取NamespaceHandler的映射过程。
摘要由CSDN通过智能技术生成

1 自定义标签

遗留问题:

  • 在AbstractApplicationContext 中的prepareBeanFactory方法设置了addBeanPostProcessor ,是否和Bean 中的生命周期有关。在ClassPathXmlApplicationContext中调用了AsbstractApplicationContext的refresh方法。
  • 依据RootBeanDefinition 实例化Bean

代码总结:

  • 缓存数据模式 读缓存(未命中) - 加锁 - 读缓存 (未命中)- 缓存数据
  • SPI实现依据参数读取不同的实现类。

dubbo-demo-consumer.xml 中使用了Dubbo自定义标签,例如:dubbo:application;dubbo:reference;在spring中使用自定义标签,有如下几步:

  • 设置配置属性和JavaBean
    设置一个与标签对应的JavaBean,用于存放标签中的属性值, 例如Dubbo中的ApplicationConfig、ReferenceConfig
  • 设置XSD文件
    文件内容如 xsd链接 所示
  • 编写BeanDefinitionParser
    实现对配置文件中的标签解析。如 DubboBeanDefinitionParser
  • 编写NamespaceHandler
    实现标签和解析类BeanDefinitionParser链接,如DubboNamespaceHandler,其中的init()代码如下:
// DubboNamespaceHandler.init()
    @Override
    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("config-center", new DubboBeanDefinitionParser(ConfigCenterBean.class, true));
        registerBeanDefinitionParser("metadata-report", new DubboBeanDefinitionParser(MetadataReportConfig.class, true));
        registerBeanDefinitionParser("monitor", new DubboBeanDefinitionParser(MonitorConfig.class, true));
        registerBeanDefinitionParser("metrics", new DubboBeanDefinitionParser(MetricsConfig.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", ne
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值