dubbo源码分析--dubbo spi解析】的更多相关文章

一.概述 dubbo SPI 在dubbo的作用是基础性的,要想分析研究dubbo的实现原理.dubbo源码,都绕不过 dubbo SPI,掌握dubbo SPI 是征服dubbo的必经之路. 本篇文章会详细介绍dubbo SPI相关的内容,通过源码分析,目标是让读者能通过本篇文章,彻底征服dubbo SPI. 文章的组织方式是先介绍SPI 的概念,通过Java SPI 让大家了解SPI 是什么,怎么用,有一个初步的概念,dubbo的SPI是扩展了Java SPI的内容,自己实现了一个SPI.…
一.概述 本篇文章是dubbo SPI源码分析的第二篇,接着第一篇继续分析dubbo SPI的内容,我们主要介绍 getDefaultExtension() 获取默认扩展点方法. 由于此方法比较简单,我们略过示例部分,直接分析源码. 二.源码分析 获取默认扩展方法getDefaultExtension()是一个public.可对外提供调用的方法.我们知道,dubbo中扩展点接口必须要有@SPI注解修饰,@SPI注解代码如下: @Documented @Retention(RetentionPol…
SPI机制中的SPI实现类的读取和预处理是由ExtensionLoader类的loadFile方法来完成的 loadFile方法的作用是读取dubbo的某个SPI接口的spi描述文件,然后进行缓存,缓存,缓存(很重要,说三遍) ,读取的位置是在jar包下的META-INF\dubbo\internal目录下  一. 先对loadFile方法进行下粗的了解: loadFile方法方法被调用的顺序如下: getExtensionClasses() ——> loadExtensionClasses()…
1. 什么叫SPI? 简单总结就是一种使用类名字符串来动态实例化java类的方式,也就是反射. 2. java SPI与Dubbo SPI有什么区别 (此图来自网上,我没有刻意去截图) 然后在这个文件里面写入实现类 com.blueskykong.javaspi.serializer.KryoSerializer com.blueskykong.javaspi.serializer.JavaSerializer 但是dubbo的SPI格式变了,也就意味着不能直接使用java SPI了 文件的目录…
在 ExtensionLoader 类的loadFile方法中有下图的这段代码: 类如现在这个ExtensionLoader中的type 是Protocol.class,也就是SPI接口的实现类中XxxProtocol类中有这样的构造函数 public XxxProtocol ( Protocol  object) ,这个构造函数显然说明XxxProtocol有包装或代理这个object的意思.所以当发现了这样特点的实现类后,就会把它缓存到wrappers这个变量中,最终缓存在Extension…
private T createAdaptiveExtension() { try { return injectExtension((T) getAdaptiveExtensionClass().newInstance()); } catch (Exception e) { throw new IllegalStateException("Can not create adaptive extenstion " + type + ", cause: " + e.g…
ExtensionFactory的源码: @SPI public interface ExtensionFactory { /** * Get extension. * * @param type object type. * @param name object name. * @return object instance. */ <T> T getExtension(Class<T> type, String name); } ExtensionFactory的作用就类似sp…
ExtensionLoader类是整个SPI的核心类,每个SPI都会对应一个ExtensionLoader类实例,这个类的构造方法如下: private ExtensionLoader(Class<?> type) { this.type = type; objectFactory = (type == ExtensionFactory.class ? null : ExtensionLoader.getExtensionLoader(ExtensionFactory.class).getAd…
插件机制是Dubbo用于可插拔地扩展底层的一些实现而定制的一套机制,比如dubbo底层的RPC协议.注册中心的注册方式等等.具体的实现方式是参照了JDK的SPI思想,由于JDK的SPI的机制比较简单,满足不了一些复杂的需求,所以dubbo重写了一套SPI机制,实现了类似spring的IOC和AOP的机制,灵活度和扩展性大大得以提升,这套机制很有用,我们如果能深刻理解,完成可以把它从dubbo的代码中剥离出来,用在自己系统中.这篇文章先简单讲一下这套机制: 在dubbo的jar内部的/META-I…
一.概述 本篇介绍自适应扩展,方法getAdaptiveExtension()的实现.ExtensionLoader类本身很多功能也使用到了自适应扩展.包括ExtensionFactory扩展. 通俗的讲,自适应扩展要实现的逻辑是:调用扩展点的方法时,自动判断要调用那个扩展点实现类的方法.我们知道,一个扩展点通常有多个实现类,在配置文本文件中分多行配置,在前面的分析中,我们知道通过getExtension(String name)方法,返回的是指定key的扩展点,而自适应扩展点方法getAdap…