dubbo扫描注解,用的是AnnotationBean, 实现BeanFactoryPostProcessor和BeanPostProcessor两个接口,BeanFactoryPostProcessor用于扫描@Service注解注册成为BeanDefinition,BeanPostProcessor用于生成代理对象
1.postProcessBeanFactory方法,扫描指定包下所有带@Service注解的类,并注册为BeanDefinition;采用ClassPathBeanDefinitionScanner实现
2.postProcessAfterInitialization方法,在Bean初始化后执行,导出Service
a)判断是否在servicePackage内,不匹配则不做任何操作
b)若bean上存在@Service注解,则生成ServiceBean
c)通过@Service注解参数,注入ServiceBean属性值,用于点对点直连,而后调用afterProperties检查配置是否可用
d)缓存ServiceBean并且导出到注册中心
3.postProcessBeforeInitialization方法,执行初始化注入之前执行,注入以@Reference修饰的方法或者属性
a)检查是否与referencePackage匹配,不匹配不做任何操作
b)若方法上存在@Reference注解并且value属性值不为空,则调用方法将value作为属性值传入;若存在@Reference注解且value为空,则构造ReferenceBean对象,并生成代理对象
c)若属性字段上存在@Reference注解且value不为空,则将value设置到属性;若存在@Reference注解且value为空,则构造ReferenceBean对象,并生成代理对象