Dubbo Proxy层解析
发表时间 2020-03-25  |  浏览量:  |  分类: dubbo

Dubbo Proxy层

ProxyFactory

该接口有一个@SPI("javassist")注解,表示这是一个扩展接口,默认使用javassist实现,另一个实现是jdk动态代理。

ProxyFactory中声明了三个带@Adaptive注解的接口方法,表明这三个接口都需要dubbo自动代理的逻辑代码,在运行时根据URL选择要使用的扩展。

AbstractProxyFactory

实现了ProxyFactory接口,该抽象类主要实现的一个功能是在调用getProxy方法时,计算出代理类需要实现的接口,计算方法如下:

  1. 从url的参数中获取interfaces参数的值,这些值指定了代理类需要实现的接口
  2. 如果是需要泛化,那么代理了还需要实现GenericService接口;并且还需要实现url的参数中interface参数指定的接口,这个接口即为真正的接口。
  3. 被代理的接口
  4. 内部添加的两个内部接口:EchoServiceDestroyable

JdkProxyFactory

继承自AbstractProxyFactory,内部就是直接采用jdk的动态代理做代理,由于默认采用的javassist,因此对jdk代理方式不做分析。

JavassistProxyFactory

继承自AbstractProxyFactory,调用Wrapper为目标对象做了一层装饰,并返回了一个AbstractProxyInvoker对象,该对象内部使用wrapper调用目标对象的相关方法。

消费端的Proxy

Dubbo在消费者一侧,是通过代理机制来实现远程接口调用的,具体代理的实现就在于ProxyFactory.getProxy方法 ,该方法的是在AbstracttProxyFactory中实现的,其计算出了 一个Invoker的实现类所需要实现的接口,并交由子类实现具体的代理逻辑。

服务提供端的Wrapper

关闭