一、SPI+Dubbo ExtensionLoader机制

JavaSPI 

实际上是“基于接口的编程+策略模式+配置文件”组合实现的动态加载机制。具体而言: 1. 定义一组接口, 假设是 autocomplete.PrefixMatcher; 2. 写出接口的一个或多个实现(autocomplete.EffectiveWordMatcher, autocomplete.SimpleWordMatcher); 3. 在 src/main/resources/ 下建立 /META-INF/services 目录, 新增一个以接口命名的文件 autocomplete.PrefixMatcher, 内容是要应用的实现类(autocomplete.EffectiveWordMatcher 或 autocomplete.SimpleWordMatcher 或两者); 4. 使用 ServiceLoader 来加载配置文件中指定的实现

例:

ExtensionLoader

private static final Protocol protocol = ExtensionLoader.getExtensionLoader(Protocol.class).getAdaptiveExtension();

1、SPI机制加载具体的mapping,例:

2、封装成具体的ExtensionLoader

3、创建接口具体的代理实现

getExtension 最后返回的是包装类(ProtocolFilterWrapper等)

4、根据URL参数,获取加载哪个实现的Protocol


推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 74,417评论 12 116
  • 0 前言 站在一个框架作者的角度来说,定义一个接口,自己默认给出几个接口的实现类,同时 允许框架的使用者也能够自定...
    猿码道阅读 7,067评论 2 37
  • dubbo自定义SPI 为什么dubbo要自己设计一套SPI? JDK标准的SPI会一次性实例化扩展点所有实现,如...
    半个橙子阅读 190评论 0 8
  • 摘要:在Dubbo的官网上,Dubbo描述自己是一个高性能的RPC框架。今天我想聊聊Dubbo的另一个很棒的特性,...
    猫耳呀阅读 985评论 0 13
  • 本篇其实更应该在Dubbo系列的最早去写,只不过因为当初在读源码的时候没有开始更新博客,所以漏了重要的一个章节,那...
    此鱼不得水阅读 9,571评论 1 7