SPI是Service Provider Interfaces的简称。根据Java的SPI规范,我们可以定义一个服务接口,具体的实现由对应的实现者去提供,即Service Provider(服务提供者)。然后在使用的时候只要根据SPI的规范去获取对应的服务提供者的服务实现即可。
目录结构:
HelloService.java
package com.wang.service;
/**
* @author :wangtaisheng
* @date :Created in 2021/3/19 0019 15:36
*/
public interface HelloService {
/**
* spi测试
*/
void hello();
}
HelloServiceImpl.java
package com.wang.service.impl;
import com.wang.service.HelloService;
/**
* @author :wangtaisheng
* @date :Created in 2021/3/19 0019 15:36
*/
public class HelloServiceImpl implements HelloService {
@Override
public void hello() {
System.out.println("Hello Service");
}
}
在项目的\src\main\resources\下创建\META-INF\service 新建接口全限定名的文件
测试
public static void main(String[] args) {
ServiceLoader<HelloService> load = ServiceLoader.load(HelloService.class);
for (HelloService helloService : load) {
if (helloService instanceof HelloServiceImpl){
helloService.hello();
}
if (helloService instanceof HelloServiceImpl2) {
helloService.hello();
}
}
Iterator<TestService> iterator = load1.iterator();
TestService next = iterator.next();
next.test("next");
}
```