dubbo起停之服务注解

开始之前建议先去了解spring的BeanDefinition可以参考下这里:https://www.jianshu.com/p/56e42e82e9a0

当用户使用注解@DubboComponentScan时,会激活DubboCompentScanRegistrar,同时生成ServiceAnnotationBeanPostProcessor和ReferenceAnnotationBeanPostProcessor两种处理器,通过名称知道分别是处理服务注解和消费注解,因为ServiceAnnotationBeanPostProcessor实现了BeanDefinitionRegistryPostProcessor接口,Spring容器中所有Bean注册之后回调postProcessBeanDefinitionRegistry方法开始扫描@Service注解并注入容器

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 得到ServiceBean的BeanDefinition之后,会给bean设置 reference和value,并最终注册到容器。

在看这部分的时候会比较奇怪Spring是如何支持dubbo的Service注解的呢:

主要是下面的过程:

我们指定scanPackage,spring会将包下面的文件作为Resource对象用asm扫描得到元数据(MetadataReader)(包含类信息和注解信息以及Resource本身),然后等待这些MetadataReader的是对MetadataReader的过滤,在ClassPathScanningCandidateComponentProvider我们可以看到这样的几个成员

 

 

可以看到includeFilters的size是1,调试后可以看到

 

 

 

includeFilters包含的正是dubbo的@Service,注意到在doScan之前scan.add...新加了Filter

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2019-10-05 11:27  l2c  阅读(248)  评论(0)    收藏  举报