1.概念
正式步入今天的核心内容之前,溪源先给大家介绍一下关于SPI机制的相关概念。
SPI即Service Provider Interface,属于JDK内置的一种动态的服务提供发现机制,可以理解为运行时动态加载接口的实现类。更甚至,大家可以将SPI机制与设计模式中的策略模式建立联系。
SPI机制:
从上图中理解SPI机制:标准化接口+策略模式+配置文件;
SPI机制核心思想:系统设计的各个抽象,往往有很多不同的实现方案,在面向的对象的设计里,一般推荐模块之间基于接口编程,模块之间不对实现类进行硬编码。一旦代码里涉及具体的实现类,就违反了可拔插的原则,如果需要替换一种实现,就需要修改代码。为了实现在模块装配的时候能不在程序里动态指明,这就需要一种服务发现机制
使用场景:
数据库驱动加载:面对不同厂商的数据库,JDBC需要加载不同类型的数据库驱动;
日志接口实现:SLF4J加载不同日志实现类;
溪源在实际开发中也使用了SPI机制:面对不同仪器平台的结果文件上传需要解析具体的结果,文件不同,解析逻辑不同,因此采用SPI机制能够解耦和降低维护成本;
SPI机制使用约定:
从上面的图中,我们可以清晰的知道SPI的三部分:接口+实现类+配置文件;因此,项目中若要利用SPI机制,则需要遵循以下约定:
当服务提供者提供了接口的一种具体实现后,在jar包的META-INF/services目录下创建一个以“接口全限定名”为命名的文件,内容为实现类的全限定名。
主程序通过java.util.ServiceLoder动态装载实现模块,它通过扫描META-INF/services目录下的配置文件找到实现类的全限定名,把类加载到JVM;
2.实践
————————————————
版权声明:本文为CSDN博主「溪~源」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/xuan_lu/article/details/107499707