dubbo中扩展点adapter实现

      dubbo中扩展点加载器,extensionloader中有个方法getAdaptiveExtension,就是获得这个扩展点的adptive实现,像大多数这个类中方法一样,先会触发加载扩展点所有类信息。然后在去创建这个类的adaptive类。

生成这个扩展点对应的adaptive类,有两种方式,一种是看扩展点所有实现,是有有某个实现带有,Adaptive注解,如果有则这个类就为这个扩展点的Adaptive类,如果没有,就会利用,javaassist技术动态生成,代码,编译生成,这个扩展点的对应的Adaptive类。
        基本逻辑就是,会为这个扩展点接口的所有,带有Adaptive标签的,方法自动生成转接代码,其他方法通过抛出exception关闭,代码的逻辑基本是,

1:先通过反射机制,来获得将要被adaptive方法的所有参数,抛出exception,返回值

2:获得url局部参数

    2.1:如果有参数直接为URL类型,则直接就使用这个参数

    2.2:如果没有参数,则看是否带这个url属性的参数。

 3:获得key值,先取得adaptive这注解的值,如为空,则直接使用扩展点接口的点分割名。

 4:判断是否有com.alibaba.dubbo.rpc.Invocation参数类

5:获得通过确定的key去获得对应的扩展实现实例。

6:直接调用扩展点实现实例的方法

相关推荐