一、SPI+Dubbo ExtensionLoader机制

2018-07-31  本文已影响0人  恶魔幻心

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


上一篇下一篇

猜你喜欢

热点阅读