dubbo自适应拓展

在 Dubbo 中,很多拓展都是通过 SPI 机制进行加载的,比如 Protocol、Cluster、LoadBalance 等。有时,有些拓展并不想在框架启动阶段被加载,而是希望在拓展方法被调用时,根据运行时参数进行加载。这听起来有些矛盾。拓展未被加载,那么拓展方法就无法被调用(静态方法除外)。拓展方法未被调用,拓展就无法被加载。对于这个矛盾的问题,Dubbo 通过自适应拓展机制很好的解决了。
自适应拓展机制的实现逻辑比较复杂,首先 Dubbo 会为拓展接口生成具有代理功能的代码,(拓展接口所定义的方法会在开始时就加载)然后通过 javassist 或 jdk 编译这段代码,得到 Class 类,有点像CGLIB。

一、Adaptive注解

该注解可作用在注解上或方法上,主要是作用在接口方法上,拓展的加载逻辑可由框架自动生成。

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
public @interface Adaptive {
    String[] value() default {};
}

通过URL来获取需要实例化的对象

  1. 首先生成接口类的代码
  2. 编译为class文件
  3. 通过反射进行实例化(运行时获取新的对象)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容