Dubbo之@Activate

本文介绍了Dubbo中的@Activate注解,它允许在多个实现类上标注并获取一个集合。通过@Activate,可以配合ExtensionLoader的getActivateExtension方法获取到激活的扩展实现。文章详细解析了如何使用@Activate,以及源码中的实现逻辑,包括默认实现类的筛选和排序规则。
摘要由CSDN通过智能技术生成

建议先阅读上一篇文章Dubbo之@Adaptive,效果更佳。

关键词:@Activate


《Dubbo之@SPI》《Dubbo之@Adaptive》中分别介绍了@SPI@Adaptive的使用和功能,你会发现,前面这两个注解,通常方法只能获取到一个结果,可是有时候需要获取到多个结果该怎么办?这个时候,@Activate就站出来了。

@Activate可以标注在多个实现类上,并通过方法getActivateExtension获取到的也是一个集合。我感觉这个注解的逻辑是三个注解中最绕人的。@Activate可以作用在类上和方法上。

public @interface Activate {
    // 设置该实现类的分组名。当获取默认实现类的时候,会过滤掉分组不匹配的实现类
    String[] group() default {};
    // 用于默认实现类的过滤条件。当配置的value值,在指定的URL中有个参数key和其一样(key.equals(value)))或key以.+value结尾(key.endWith("."+vaue))),
    // 并且通过url.getParamter(key)!=null,则匹配,否则过滤掉此实现类
    String[] value() default {};
    // 对默认实现类进行排序,即设置调用的先后顺序。设置在哪些Activate之前被调用
    // 填写扩展实现类的配置key
    // 排序逻辑见ActivateComparator类
    String[] before() default {};
    // 设置在哪些扩展实现类之后被调用
    String[] after() default {};
   // 排序。数值越小,排序越前
    int order() default 0;
}

█ 如何使用

关于标注在类上的使用,就不去创建接口和配置了。我们来看下Dubbo自带的com.alibaba.dubbo.rpc.Filter接口,该接口是一个SPI接口,实现类上被标注了@Activate接口。配置文件的内容如下。

cache=com.alibaba.dubbo.cache.filter.CacheFilter
validation=com.alibaba.dubbo.validation.filter.ValidationFilter
echo=com.alibaba.dubbo.rpc.filter.EchoFilter
generic=com.alibaba.dubbo.rpc.filter.GenericFilter
genericimpl=com.alibaba.dubbo.rpc.filter.GenericImplFilter
token=com.alibaba.dubbo.rpc.filter.TokenFilter
accesslog=com.alibaba.dubbo.rpc.filter.AccessLogFilter
activelimit=com.alibaba.dubbo.rpc.filter.ActiveLimitFilter
classloader=com.alibaba.dubbo.rpc.filter.C
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Dubbo的@Service注解是用来标识一个类是一个Dubbo服务的提供者。这个注解会使得该类被扫描到Spring容器中,并生成对应的ServiceConfig对象。在Dubbo中,ServiceConfig是用来配置和暴露服务的。通过@Service注解,Dubbo会自动为该类生成一个ServiceConfig对象,并将相关的配置信息注入到ServiceConfig中。具体的实现是通过ServiceClassPostProcessor的buildServiceBeanDefinition方法来完成的。该方法会遍历扫描到的每个BeanDefinition,并为每个类生成一个ServiceBean的BeanDefinition,将DubboService注解的信息注入到ServiceBean中,同时将类的第一个接口作为属性注入到ServiceBean中。因此,@Service注解是Dubbo中用来标识服务提供者的重要注解之一。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [【转载】Dubbo注解@DubboService的机制](https://blog.csdn.net/lyf_9580/article/details/121478752)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Dubbo的@Reference和@Service说明](https://blog.csdn.net/ywb201314/article/details/106671462)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值