在dubbo源码中,涉及到一些dubbo自定义的注解,这篇笔记主要记录这些注解的原理和使用方式,了解了这些之后,便于我们对dubbo进行二次扩展
@SPI
dubbo的SPI机制,和Java原生的SPI机制相比,新增了name,可以指定某一个实现类对应的name,我们在使用的时候,可以根据name,获取自己想要使用的扩展类,如果在获取实现类时,指定name为true,默认返回的是@spi注解中指定的name对应的实现类
简单来说:@SPI注解中指定的value值,是当前接口默认的实现类,比如,下面的这个截图,就表示Protocol的默认实现类是DubboProtocol
这个在哪里可以体现呢?
com.alibaba.dubbo.common.extension.ExtensionLoader#loadExtensionClasses
在这个方法中,是加在指定文件目录下的文件的,其中会先根据type,获取到对应的@SPI注解,这里的type,就是对应的接口;所以,这里可以看到,会把@SPI注解中value对应的key,设置为CacheDefaultName这个变量中
com.alibaba.dubbo.common.extension.ExtensionLoader#getExtension
在这个方法中,是根据入参中的name,找到对应的实现类,比如:当前type是protocol,如果入参了dubbo,那就是要找key是dubbo的protocol实现类,通常是dubboProtocol
这里会看到,如果如此那的name是true,表示要获取的是默认的实现类
这里会看到,就是从CacheDefaultName中获取的
public T getDefaultExtension()