开篇
上一篇讲到了 Dubbo SPI 使用方法(1) - 扩展点自动包装。
本文接着讲 Dubbo SPI - 扩展点自适应。
正文
大纲
- 扩展点自适应介绍
- @Adaptive 注解使用方法
- 作用在类上
- 作用在方法上
1. 扩展点自适应
ExtensionLoader 注入的依赖扩展点是一个 Adaptive 实例,直到扩展点方法执行时才决定调用是哪一个扩展点实现。
Dubbo 使用 URL 对象(包含了Key-Value)传递配置信息。
扩展点方法调用会有 URL 参数(或是参数有URL成员)这样依赖的扩展点也可以从URL拿到配置信息,所有的扩展点自己定好配置的 Key 后,配置信息从 URL 上从最外层传入。URL在配置传递上即是一条总线。
上面摘自官网的一段介绍。
划重点:
-
扩展方法中有 URL 参数
也可以是包含 URL 成员的参数
-
直到扩展点方法执行时,才决定调用哪个扩展点实现
跟 扩展点自动包装的区别
-
通过 URL 传递配置信息
通过 URL 中的参数,决定调用哪个扩展类实现
如果还是不好理解,就继续看下面的案例。
2. @Adaptive 注解
要想实现 扩展点自适应,需要借助 @Adaptive
注解,该注解可以作用在两个地方:
- 扩展实现类上
在类上,表示该类是一个扩展类,不需要生成代理直接用即可;
- 扩展接口方法上
在方法上则表示该方法需生成代理, 此时就需要用到上面提到的 URL 参数
2.1 作用在扩展实现类上
这个相对比较简单,没什么特别的地方,上面也有提到,当 @Adaptive
作用在类上,就表示该类是一个扩展类。
再说的