dubbo的ExtensionLoader】的更多相关文章

了解4个概念:接口,实现类,wrapper,adaptive. 扩展是接口实现类被wrap之后的对象,adaptive扩展是动态生成的类(例如Dubbo$Adaptive类). dubbo框架为接口指定一个同名配置文件,文件中定义了实现类(包括 wrapper). 以dubbo-2.5.2.jar/META-INF/dubbo/internal/com.alibaba.dubbo.rpc.protocol 文件为例, 文件内容由名值对组成(扩展名=类的全限定名). registry=com.al…
ExtensionLoader加载机制阅读: Dubbo的类加载机制是模仿jdk的spi加载机制:  Jdk的SPI扩展加载机制:约定是当服务的提供者每增加一个接口的实现类时,需要在jar包的META-INF/service/目录下同时创建一个以服务接口命名的具体实现类,该文件里面就是保存的实现该接口的具体实现类.而当外部程序装配这个模块的时候,就能通过该jar包META-INF/services/里的配置文件找到具体的实现类 名,并装载实例化,完成模块的注入. 基于这样一个约定就能很好的找到服…
dubbo的SPI机制与JDK的SPI机制对比        dubbo一款阿里一款开源的RPC框架,他本身是一款非常复杂的系统,我们主要针对里边的一些核心点来展开分析,其中duboo里的一种核心机制叫SPI( Service Provider Interface)服务发现机制,他是基于原生jdk的SPI机制演化而来.在分析duboo的ExtensionLoader之前,我们先大致了解一下标准JDK的SPI机制.一个最经典的JDK的SPI机制,就是java数据库驱动JDBC,其实JDK自带的jd…
Activate注解表示一个扩展是否被激活(使用),可以放在类定义和方法上, dubbo用它在spi扩展类定义上,表示这个扩展实现激活条件和时机. 先看下定义: @Documented @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE, ElementType.METHOD}) public @interface Activate { /** * Group过滤条件. * <br /> * 包含{@link Extens…
1.多版本支持: 基于上篇博客的 快速启动 Dubbo 服务 的代码进行多版本支持的演示:基于原来的实现类GpHelloImpl ,我们需要新增一个新版本的实类:GpHelloImpl2 public class GpHelloImpl2 implements IGpHello{ @Override public String sayHello(String msg) { return "Hello,i'm server 2:"+msg; } } 然后需要修改服务发布的dubbo-se…
转载自  斩秋的专栏  http://blog.csdn.net/quhongwei_zhanqiu/article/details/41577159 SPI接口定义 定义了@SPI注解 public @interface SPI { String value() default ""; //指定默认的扩展点 } 只有在接口打了@SPI注解的接口类才会去查找扩展点实现 会依次从这几个文件中读取扩展点 META-INF/dubbo/internal/   //dubbo内部实现的各种扩展…
一.用法 Activate注解表示一个扩展是否被激活(使用),可以放在类定义和方法上,dubbo用它在spi扩展类定义上,表示这个扩展实现激活条件和时机. @Activate(group = Constants.PROVIDER) public class DrpcServerInterceptor implements Filter{ private final ServerRequestInterceptor serverRequestInterceptor; private final S…
dubbo中SPI接口的定义如下: @Documented @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE}) public @interface SPI { /** * 缺省扩展点名. */ String value() default ""; } dubbo默认的情况下,会依次从下面几个文件中读取扩展点.1.META-INF/dubbo/internal/   //dubbo内部实现的各种扩展都放在了这个目…
转载:http://blog.csdn.net/quhongwei_zhanqiu/article/details/41577235 SPI接口定义 定义了@SPI注解 public @interface SPI { Stringvalue() default ""; //指定默认的扩展点 } 只有在接口打了@SPI注解的接口类才会去查找扩展点实现 会依次从这几个文件中读取扩展点 META-INF/dubbo/internal/   //dubbo内部实现的各种扩展都放在了这个目录了…
框架设计 整体设计 图例说明: 图中左边淡蓝背景的为服务消费方使用的接口,右边淡绿色背景的为服务提供方使用的接口, 位于中轴线上的为双方都用到的接口. 图中从下至上分为十层,各层均为单向依赖,右边的黑色箭头代表层之间的依赖关系,每一层都可以剥离上层被复用,其中,Service和Config层为API,其它各层均为SPI. 图中绿色小块的为扩展接口,蓝色小块为实现类,图中只显示用于关联各层的实现类. 图中蓝色虚线为初始化过程,即启动时组装链,红色实线为方法调用过程,即运行时调时链,紫色三角箭头为继…