一、前言
前面dubbo整体架构分析里面我们讲解了服务提供者暴露一个服务的详细过程是,首先具体服务的实现类转换为了Invoker对象,然后Invoker在转换为Exporter,本文就来讲解第一步转换。
image.png
二、实现类到Invoker对象的转换
服务提供方式是通过下面方法实现服务提供的实现类到Invoker对象的转换
image.png
其中proxyFactory是代理类的扩展接口,默认情况下这里调用getInvoker返回的spi扩展实现类是JavassistProxyFactory,也就是这里是调用了JavassistProxyFactory的getInvoker方法。JavassistProxyFactory的getInvoker方法代码如下:
image.png
代码里面首先创建了代理类的一个wrapper类,目的是消除反射调用,原理类似于cglib的索引方式去除反射调用,提高性能。
然后创建了一个AbstractProxyInvoker类,并重写了doInvoke方法。
当提供方接受到服务消费的请求后最后会调用AbstractProxyInvoker的doInvoke,而doInvoke内部委托包含代理类的wrapper类来具体执行。
三、总结
服务提供方实现类到Invoker的转换,是通过 ProxyFactory 类的 getInvoker 方法使用 服务实现类 生成一个AbstractProxyInvoker 实例,其中使用wrapper类消除反射,提高性能。
欢迎大家加入微信扫码进入知识星球进行深入探讨,最近的主题