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