# 《RPC手撸专栏》第41章:基于SPI扩展ASM反射机制调用真实方法

作者:冰河
星球:http://m6z.cn/6aeFbs (opens new window)
博客:https://binghe.gitcode.host (opens new window)
文章汇总:https://binghe.gitcode.host/md/all/all.html (opens new window)

沉淀,成长,突破,帮助他人,成就自我。

大家好,我是冰河~~

在前面的章节中,我们在服务消费者端基于SPI扩展了JDK、CGLib、Javassist、ByteBuddy和ASM动态代理机制。在服务提供者端,基于SPI扩展了JDK、CGLib、Javassist和ByteBuddy反射机制调用真实方法的功能。

# 一、前言

在服务提供者端,我们扩展的调用真实方法的方式已经够多了,但是我还想扩展其他的反射机制调用真实方法。

在前面的文章中,我们基于SPI扩展了使用JDK、CGLib、Javassist和ByteBuddy反射机制调用真实方法的功能,并且已经完美经过了测试的验证。相比于绝大部分RPC框架而言,我们现在自己手写的RPC框架内置的反射机制调用真实方法的功能,已经不少了。甚至比大部分RPC框架内置的通过反射机制调用真实方法的功能都多。

# 二、目标

目标很明确:基于SPI扩展ASM反射机制调用真实方法!

在前面的文章中,我们已经完美的基于SPI扩展了服务提供者调用真实方法的功能,并且基于SPI动态扩展了JDK、CGLib、Javassist和ByteBuddy反射机制,在服务提供者端实现了调用真实方法高度的扩展性。

这在设计上也得益于我们使用SPI机制对这些功能进行了插件化设计。本章,我们再次基于SPI扩展ASM反射机制调用真实方法的功能。后续小伙伴们在实际使用框架时,如果框架内置的反射机制调用真实方法不能满足实际需求,大家可以按照RPC框架中使用的SPI规范,自己基于SPI扩展实现其他的反射机制来调用真实的方法。

本章,我们就继续基于SPI扩展ASM反射机制调用真实方法。

# 三、设计

如果让你设计基于SPI扩展ASM反射机制调用真实方法,你会怎么设计呢?

基于SPI扩展ASM反射机制调用真实方法的流程图如图41-1所示。

图41-1

由图41-1可以看出,服务提供者会以SPI的形式引用调用真实方法的SPI接口,基于JDK、CGLib、Javassist、ByteBuddy和ASM的反射机制调用真实方法的类是SPI接口的实现类,服务提供者会通过SPI加载JDK、CGLib、Javassist、ByteBuddy和ASM反射机制调用真实方法的实现类。而JDK、CGLib、Javassist、ByteBuddy和ASM反射机制调用真实方法的实现类会实现SPI接口,最终调用真实方法。

# 四、实现

说了这么多,具体要怎么实现呢?

# 核心类实现关系

基于SPI扩展ASM反射机制调用真实方法的核心类关系如图41-2所示。

图41-2

# 查看完整文章

加入冰河技术 (opens new window)知识星球,解锁完整技术文章与完整代码