前言
spi简单理解:发布一个接口,具体实现由各产商自主决定
1.新建一个提供服务接口的maven工程,创建DataBaseDriverInterface接口,并且打包
2.新建一个实现服务接口的maven工程
2.1 引入com.liao.spi.mysqlInterface依赖
2.1 创建MysqlDataBaseDriver类,实现DataBaseDriverInterface接口
package com.liao.spi.mysqlImpl;
import com.liao.spi.mysqlInterface.DataBaseDriverInterface;
public class MysqlDataBaseDriver implements DataBaseDriverInterface {
@Override
public void getDriver() {
System.out.println("this is mysql driver");
}
}
2.2 在META-INF/services/目录下创建一个以DataBaseDriverInterface全限定类名为名称的文件,内容为接口实现类的全限定类名
2.3 项目结构如图
2.4 打包成jar包
3 新建一个测试工程
3.1 pom文件引入前两个工程的依赖
<dependency>
<groupId>com.liao.spi.mysqlInterface</groupId>
<artifactId>spi-liao-mysql-interface</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.liao.spi.mysqlImpl</groupId>
<artifactId>spi-liao-mysql-impl</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
3.2 新建测试类
package com.liao.spi.usedatabase;
import com.liao.spi.mysqlInterface.DataBaseDriverInterface;
import java.util.ServiceLoader;
public class Test {
public static void main(String[] args) {
ServiceLoader<DataBaseDriverInterface> dataBaseDriverInterfaceServiceLoader = ServiceLoader.load(DataBaseDriverInterface.class);
for (DataBaseDriverInterface dataBaseDriver:dataBaseDriverInterfaceServiceLoader) {
dataBaseDriver.getDriver();
}
}
}
3.3 输出结果如图