• dubbo源码解析(一)


    1. 在dubbo包下/META-INF/spring.handlers这个文件中定义了。在spring加载时首先会扫描这个配置文件
    文件内容如下
    http://code.alibabatech.com/schema/dubbo=com.alibaba.dubbo.config.spring.schema.DubboNamespaceHandler

    引用了一个类DubboNamespaceHandler,这个类实现了NamespaceHandlerSupport这个接口
    实现了这个接口有什么用呢?
    以后再看

    2. spring在加载时会调用NamespaceHandlerSupport#init()这个方法

    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));
        }

    这个方法根据配置文件中各个配置项,将对应的配置转换为对应的配置信息

    这里都new 了DubboBeanDefinitionParser这个类,这个类有两个构造参数一个是配置类,另外一个是是否required

    这个类因为实现了BeanDefinitionParser接口,所以实现了接口的parse方法

    public BeanDefinition parse(Element element, ParserContext parserContext)

    这个方法会在spring初始化的时候被调用,具体什么时候调用要看springbean的生命周期了

    在这个方法内注册了对应的beanClass,,将对应的beanClass注册到spring容器中。

    这样就可以在其它地方对bean进行调用了。

  • 相关阅读:
    [HDU6793] Tokitsukaze and Colorful Tree
    [NOI2020]命运
    [NOI2020]美食家
    模拟9
    晚测2
    模拟8
    联考4
    模拟7
    模拟6
    关于数论
  • 原文地址:https://www.cnblogs.com/liguangming/p/9850792.html
Copyright © 2020-2023  润新知