一、概述
上一篇文章已经介绍了jdk SPI机制的源码,Dubbo也采用SPI机制进行接口服务的扩展ExtensionLoader,不过采用了不同的实现方式,相比于jdk提供的ServiceLoader复杂的多,丰富了以下几个功能。
1.自动注入依赖的扩展类
2.自动包装扩展类
3.增加注解SPI,提供默认实现类
4.提供注解Adaptive,采用javassist动态生成代码,默认实现为Adaptive instance
二、ExtensionLoader
1.示例代码
获取ExtensionFactory扩展工厂实例
ExtensionLoader.getExtensionLoader(ExtensionFactory.class).getAdaptiveExtension()
获取Protocol协议实例,得到它的默认端口
int defaultPort = ExtensionLoader.getExtensionLoader(Protocol.class).getExtension(name).getDefaultPort();
2.源码分析
静态方法创建Extensio