SPI
SPI是什么
SPI全称Service Provider Interface,是Java提供的一套用来被第三方实现或者扩展的API,它可以用来启用框架扩展和替换组件。
思路:接口由调用者定义,服务方根据接口适配定义不同的实现类;调用者调用接口编程,服务方提供实现类。调用者在执行过程中会在classpath路径上(服务方jar包的META-INF/services/文件中明确配置实现类名)寻找服务方提供的实现类。
- 1、当服务提供者提供了接口的一种具体实现后,在jar包的META-INF/services目录下创建一个以“接口全限定名”为命名的文件,内容为实现类的全限定名;
- 2、接口实现类所在的jar包放在主程序的classpath中;
- 3、调用者通过java.util.ServiceLoder动态装载实现模块,它通过扫描META-INF/services目录下的配置文件找到实现类的全限定名,把类加载到JVM;
- 4、SPI的实现类必须携带一个不带参数的构造方法;
适用于:调用者根据实际使用需要,启用、扩展、或者替换框架的实现策略
比较常见的例子:
- 数据库驱动加载接口实现类的加载,JDBC加载不同类型数据库的驱动
- 日志门面接口实现类加载SLF4J加载不同提供商的日志实现类