您现在的位置是:首页 >学无止境 >SPI机制理解以及java spring dubbo 实现对比网站首页学无止境
SPI机制理解以及java spring dubbo 实现对比
简介SPI机制理解以及java spring dubbo 实现对比
SPI简介
SPI全称是 service provider interface ,是一种服务提供发现机制。也可以理解成动态替换机制。
常用来对应用程序扩展。
SPI核心思想
spi机制是非常优秀的解耦思想。SPI机制可以非常灵活让接口和实现类分离开。符合面向对象编程思想。开放封闭原则。对扩展开放、对修改关闭。
SPI原理
程序在运行时自动加载类文件并实例化。
SPI 产品实现对比
市面上有3种实现产品。我们做个简单对比。
产品 | 实现类 | 文件目录 | 配置文件文件名要求 | 文件格式 | 实现产品 |
JAVA | ServiceLoader | META-INF/services | 接口全限定名 | 实现类全限定名 | jdbc |
Spring | SpringFactoriesLoader | META-INF | spring.factories | 键值对。键:接口名,值:接口实现类。可以是多个 | AutoConfigurationImportSelector |
dubbo | ExtensionLoader | META-INF/services META-INF/dubbo META-INF/dubbo/ineral | 接口全限定名 | 键值对。键:springbean名称 值:接口实现类 | RegistryProtocol |
SPI产品优缺点对比
产品 | 实现类 | 优点 | 缺点 |
JAVA | ServiceLoader | 1. 实现了spi机制。接口和实现分离 2. 源码简单 | 1. 接口返回是iterator迭代器,不方便使用。 2. 返回所有接口实现类实例,浪费内存。 3. 未提供选择具体子类工具 |
Spring | SpringFactoriesLoader | 1. 实现spi机制。接口和实现分离。 2. 配置简单。所有的接口实现都存放spring.factories文件中 3. 缓存实例,避免2次加载。 | 1. 和java标准实现一样,未提供选择具体子类工具。 |
dubbo | ExtensionLoader | 1.实现了spi机制,接口和实现分离 2. 提供选择子类的工具。 3. 缓存实例,避免2次加载。 | 1. 源码复杂 |
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。