#2:不一样的 DUBBO:simple demo - WildChildren/incubator-dubbo GitHub Wiki

接上文继续

目录

dubbo-provider启动流程

  • spring 容器的启动

    • 容器初始化 BeanDefinitionReader ,上文的示例中为 AnnotatedBeanDefinitionReader
    • 初始化 ClassPathBeanDefinitionScanner 定义 BeanDefinition 的扫描类(因为上文选定的容器的原因);
  • dubbo 环境的注册,context.register(ProviderConfiguration.class);。实际调用的是 AnnotatedBeanDefinitionReader::registerBean(annotatedClass, null, (Class<? extends Annotation>[]) null)

    • 方法 registerBean 将会把配置类 ProviderConfiguration 转换成一个 BeanDefinition 注册到对应的是 spring 容器中。
    • 旁支介绍:ProviderConfiguration 是如何将 DubboScan的注解加入到 spring 中的。
      - AbstractApplicationContext::refresh
      - invokeBeanFactoryPostProcessors(beanFactory);
      - PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(beanFactory, getBeanFactoryPostProcessors());
      - invokeBeanDefinitionRegistryPostProcessors(currentRegistryProcessors, registry);
      - postProcessor.postProcessBeanDefinitionRegistry(registry); 实际是类 ConfigurationClassPostProcessor::postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry)
      - processConfigBeanDefinitions(registry);
      - parser.parse(candidates);
      - parse(((AnnotatedBeanDefinition) bd).getMetadata(), holder.getBeanName());
      - processConfigurationClass(new ConfigurationClass(metadata, beanName));
      - doProcessConfigurationClass(configClass, sourceClass);
      
      在最后的这个方法中,会将 dubbo 的注解 DubboComponentScan 对应的 DubboComponentScanRegistrar 类通过 @Import 的方式进行导入配置。
      以及其余的一些 ReferenceAnnotationBeanPostProcessor、ServiceAnnotationBeanPostProcessor
    

spring类介绍

  • BeanFactory:spring的bean容器;
  • AnnotationConfigApplicationContext:spring 的 bean 容器升级版。在实现容器的基础功能外实现了 spring 上下文的一些操作;
    • BeanDefinitionRegistry:BeanDefinition的注册类
    • ListableBeanFactory:就是 BeanFactory
  • BeanDefinition:spring bean 容器的 bean 描述类
  • BeanDefinitionReader:BeanDefinition 的解析类,根据确定的规则来解析得到相应的 BeanDefinition
  • PostProcessorRegistrationDelegate:注册的后置处理的委派模式实现类
  • BeanDefinitionRegistryPostProcessor:BeanDefinition 的注册后置处理类
  • ConfigurationClassParser:对于确定的规则进行 BeanDefinition 的转换实现类

register

subscribe

invoke

notify

回答问题

  • 1、dubbo目前不可以不依赖spring单独运行

dubbo 需要依赖于 spring 的容器流程来进行服务的类注册到容器和类的实现;因此不能去掉。(或许 我会在后边的时候进行相应的修改处理,试着隔离这个部分的代码实现)

未完待续......