建议先阅读上一篇文章Dubbo之@SPI,效果更佳。
关键词:@Adaptive
百度一下adaptive,翻译是这样的:
个人觉得结合Dubbo中的@Adaptive的功能,合适的翻译是能适应的。而@Adaptive真的做到了根据参数能适应地返回不同的结果对象。
█ 如何使用
@Adaptive,可以在两个地方使用:接口方法上或者接口的实现类上。
①修改AnimalService接口,添加两个方法。在方法上标注@Adaptive注解。
package study.rui.dubbo;
import com.alibaba.dubbo.common.URL;
import com.alibaba.dubbo.common.extension.Adaptive;
import com.alibaba.dubbo.common.extension.SPI;
@SPI
public interface AnimalService {
@Adaptive({"firstName"})
void show(URL url);
@Adaptive({"lastName"})
void run(Animal animal);
void say();
}
第二个方法用到了一个Animal类,Animal的代码如下:
package study.rui.dubbo;
import com.alibaba.dubbo.common.URL;
public class Animal {
private URL url;
public void setUrl(URL url) {
this.url = url;
}
public URL getUrl() {
return url;
}
}
②修改DogService类,并且新增一个接口实现类CatService。在配置文件中添加CatService的配置。
package study.rui.dubbo.impl;
import com.alibaba.dubbo.common.URL;
import study.rui.dubbo.Animal;
import study.rui.dubbo.AnimalService;
public class DogService implements AnimalService {
@Override
public void say() {
System.out.println("dog say woo woo");
}
@Override
public void show(URL url) {
System.out.println("dog" + url.toString());
}
@Override
public void run(Animal animal) {
System.out.println("dog" + animal.getUrl().toString());
}
}
package study.rui.dubbo.impl;
import com.alibaba.dubbo.common.URL;
import com.alibaba.dubbo.common.extension.Adaptive;
import study.rui.dubbo.Animal;
import study.