java SPI 代码示例
SPI 是 Service Provider Interface 的缩写,中文解释为服务提供发现接口
SPI 是一种基于「接口 + 策略模式 + 配置文件」组合实现的动态加载接口实现类的机制
实现步骤:
- 在类路径下的
META-INF/services
目录下,创建以服务接口的 "全限定名" 命名的文件,文件的内容为接口实现类的全限定名,每行一个接口实现 - 实现类必须在当前程序的 classpath 下
- 使用
java.util.ServiceLoader
动态加载接口实现(ServiceLoader
会自动扫描 META-INF/services 下的配置文件加载实现类)
示例如下:
1、创建接口
package com.test.root.base.spi; public class FirstSpiService implements SimpleSpiService { @Override public void say() { System.out.println("Say first!"); } }
2、实现接口
package com.test.root.base.spi; public class FirstSpiService implements SimpleSpiService { @Override public void say() { System.out.println("Say first!"); } }
package com.test.root.base.spi; public class SecondSpiService implements SimpleSpiService { @Override public void say() { System.out.println("Say Second!"); } }
3、创建 SPI 文件
SPI文件内容
com.test.root.base.spi.FirstSpiService com.test.root.base.spi.SecondSpiService
2、加载并使用接口实现
package com.test.root.base.spi; import java.util.ServiceLoader; public class SpiTest { public static void main(String[] args) { ServiceLoader<SimpleSpiService> simpleSpiServices = ServiceLoader.load(SimpleSpiService.class); for (SimpleSpiService simpleSpiService : simpleSpiServices) { simpleSpiService.say(); } } }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步