《RPC实战与核心原理》学习笔记Day4

05 | 动态代理:面向接口编程,屏蔽RPC处理流程

RPC和动态代理有什么关系?

当我们使用RPC时,我们一般会先找到服务提供方要接口,然后将接口依赖配置到项目中,我们在编写业务逻辑时,当需要调用提供方接口时,我们只需要通过依赖注入的方式把接口注入到项目中,然后再代码里面直接调用接口的方法。
但是我们的代码中,接口并没有包含真实的业务逻辑,相关的业务逻辑代码是在服务提供方应用汇总,但是我们只是调用了接口方法,就正常执行了业务逻辑,这是就是动态代理帮助我们实现的。
总的来说,RPC会自动给接口生成一个代理类,当我们在项目中注入接口时,运行过程中实际绑定的是这个接口生成的代理类,这样接口方法被调用的时候,它实际上是被代理类拦截到了,这样我们就可以在代理类中,加入远程调用逻辑。

在Java中,有哪些技术可以实现动态代理?

  • JDK提供的InvocationHandler
  • Javassist
  • Byte Buddy

上述三个工具的区别在于通过什么方式生成代理类以及在生成的代理类中怎么完成方法调用。

动态代理技术选型需要考虑什么因素?

  • 生成代理类的速度、字节码大小。
  • 生成的代理类的执行效率。
  • 是否易用,API设计是否好理解、社区活跃度、依赖复杂度。

如果没有动态代理帮我们完成方法调用拦截,我们应该怎样完成RPC调用?

如果没有动态代理,那么我们需要使用静态代理来实现,需要对原始类中所有的方法都实现一遍,并且为每个方法附加相似的代码逻辑。

posted @ 2023-01-21 23:28  李潘  阅读(27)  评论(0编辑  收藏  举报