
Dubbo之SPI实现原理详解
SPI全称为Service Provider Interface,是一种服务提供机制,比如在现实中我们经常会有这种场景,就是对于一个规范定义方而言(可以理解为一个或多个接口),具体的服务实现方是不可知的(可以理解为对这些接口的实现类),那么在定义这些规范的时候,就需要规范定义方能够通过一定的方式来获取到这些服务提供方具体提供的是哪些服务,而SPI就是进行这种定义的。
说明:
Dubbo 的扩展点加载是基于JDK 标准的 SPI 扩展点发现机制增强而来的,Dubbo 改进了 JDK 标准的 SPI 的以下问题:
dubbo对于SPI的实现主要是在ExtensionLoader这个类中,这个类主要有三个方法:
如下是getExtension()方法的源码:
createExtension()方法的源码:
在createExtension()方法中,其主要做了三件事:
关于wrapper对象,这里需要说明的是,其主要作用是为目标对象实现AOP。wrapper对象有两个特点:
getExtensionClasses()方法的源码
loadDirectory()方法的源码:
loadClass()方法的源码
loadClass()方法主要作用是对子类进行划分,这里主要划分成了三部分:
总结而言,getExtension()方法主要是获取指定名称对应的子类。在获取过程中,首先会从缓存中获取是否已经加载过该子类,如果没加载过则通过定义文件加载,并且使用获取到的wrapper对象封装目标对象返回。
getAdaptiveExtension()方法源码

2025-03-04 广告