• Home
  • Articles
    • 日志
    • 妍小言
    • 舒小书
    • 浩然说
    • 生活日记
  • All Tags

dubbo service autoconfig

27 Dec 2017

Reading time ~1 minute

需求

对于实现service注解的自动扫描然后托管,需要实现两个方面的需求:

  1. 托管被添加了@Service注解的Impl实例。
  2. 构建并注册ServiceBean,并关联Impl的引用。

Service托管

spring提供了一个@Import注解,可以import一个ImportBeanDefinitionRegistrar实现,在添加了@Import的Bean构建了之后会回调ImportBeanDefinitionRegistrar#registerBeanDefinitions方法,以用来实现自定义BeanDefinition的注册管理。

  1. 通过AutoConfigurationPackages获取spring boot所扫描的包路径。
  2. 自定义一个BeanDefinitionScanner,继承ClassPathBeanDefinitionScanner,添加IncludeFilter,值扫描添加了@Service注解的类。
  3. 调用父类的doScan方法,获取所有添加了@Service注解的Impl的BeanDefinition。
  4. 通过BeanDefinitionBuilder来构建ServiceBean的RootBeanDefinition并添加实现类的引用。
  5. 通过@Service实例的数据来向ServiceBean的RootBeanDefinition中添加配置引用。
  6. 向registry中注册ServiceBean的RootBeanDefinition以实现Service的管理。

代码地址



dubboautoconfig