dubbo解析-@EnableDubbo注解详解

本文基于dubbo 2.7.5版本代码

dubbo必须配置注解@EnableDubbo。

一、@EnableDubbo注解功能

@EnableDubbo整合了三个注解@EnableDubboConfig、@DubboComponentScan、@EnableDubboLifecycle。@EnableDubbo的功能都是由这三个注解完成的。

  1. @EnableDubboConfig引入类DubboConfigConfigurationRegistrar,将用于解析配置相关的类注册到spring容器;
  2. @DubboComponentScan引入类DubboComponentScanRegistrar,用于指定@Service扫描路径;
  3. @EnableDubboLifecycle引入类DubboLifecycleComponentRegistrar,注册了两个监听器到spring容器。

一般我们需要配置@DubboComponentScan,定义@Service的扫描路径。如果不配置@DubboComponentScan,默认使用@EnableDubbo注解的类的包路径。

二、详细介绍注解引入的三个类的作用

上面三个引入类都实现了类ImportBeanDefinitionRegistrar。dubbo实现了方法registerBeanDefinitions。该方法的入参有两个:AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry。其中importingClassMetadata表示的是@EnableDubbo注解的类的元信息,可以通过元信息获取每个注解属性值;registry包含了spring容器中所有的bean定义信息。我们可以通过类似下面的代码获取每个注解属性值:

AnnotationAttributes attributes = AnnotationAttributes.fromMap(metadata.getAnnotationAttributes(DubboComponentScan.class.getName()));
String[] basePackages = attributes.getStringArray("basePackages");
Class[] basePackageClasses = attributes.getClassArray("basePackageClasses");

这些代码给我们提供了借鉴。下面介绍一下三个引入类的作用:

  1. DubboConfigConfigurationRegistrar:将DubboConfigConfiguration.Single和DubboConfigConfiguration.Multiple注册到spring容器。Single和Multiple用于处理spring配置文件中与dubbo配置相关的配置信息。
  2. DubboComponentScanRegistrar:注册了后处理器ServiceAnnotationBeanPostProcessor,该后处理器会扫描@DubboComponentScan设置的包路径,将包路径下所有的@Service注解的类注册到spring容器。
  3. DubboLifecycleComponentRegistrar:注册了两个监听器到spring容器。

这个注解给我们的启示是,我们可以通过注解引入其他类,在引入类中注册监听器和后处理器到spring容器,还可以在引入类中获取注解配置信息,并且根据配置信息设置监听器和后处理器的属性。

评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值