#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 的容器流程来进行服务的类注册到容器和类的实现;因此不能去掉。(或许 我会在后边的时候进行相应的修改处理,试着隔离这个部分的代码实现)
未完待续......