Dubbo @Adaptive注解 自适应扩展机制原理

Dubbo中可以通过SPI机制来加载对应扩展点实现,可是一个扩展点对应着多个实现类,我们如何才能触发目标实现类中的方法呢?DubboAdaptive机制就是解决这个问题的。


下面我们用代码来看一下@Adaptive注解的使用方式以及源码实现。
  1. 扩展点接口 ICarService
package com.dubbo.service;
import org.apache.dubbo.common.URL;
import org.apache.dubbo.common.extension.Adaptive;
import org.apache.dubbo.common.extension.SPI;

@SPI
public interface ICarService {
   
    void speed(URL url);
}
  1. 两个扩展点实现类 AudiServiceBMWService
package com.dubbo.service.impl;
import com.dubbo.service.ICarService;
import org.apache.dubbo.common.URL;

// 实现类 奥迪
public class AudiService implements ICarService {
   
    @Override
    public void speed(URL url) {
   
        System.out.println("audi drive speed 100KM/H");
    }
}

// 实现类 宝马
public class BMWService implements ICarService {
   
    @Override
    public void speed(URL url) {
   
        System.out.println("bmw drive speed 200KM/H");
    }
}
  1. 扩展点配置文件 META-INF/services/com.lbb.service.ICarService
audi=com.lbb.service.impl.AudiService
bmw=com.lbb.service.impl.BMWService


一、类上添加@Adaptive注解

我们可以在类上添加@Adaptive注解来标示该类为当前扩展点的代理类,在代理类的方法中会根据传入参数从而自行选择实现类来进行调用。下面我们用具体的代码来实现一个代理类:

  1. 首先创建一个Adaptive类,集成扩展点接口
package com.lbb.adaptive;

import com.lbb.service.ICarService;
import org.apache.dubbo.common.URL;
import org.apache.dubbo.common.extension.Adaptive;
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值