3个项目
接口项目spi-provider
Provider.java
package org.example.spi;
public interface Provider {
void find();
}
实现类项目spi-client
pom.xml
<dependencies>
<dependency>
<groupId>org.example</groupId>
<artifactId>spi-provider</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
ProviderClient.javva
package org.example.spi;
public class ProviderClient implements Provider {
@Override
public void find() {
System.out.println("spi-client implements the interface of spi-provider.find");
}
}
/META-INF/services/org.example.spi.Provider
org.example.spi.ProviderClient
调用项目spi-esample
pom.xml
<dependencies>
<dependency>
<groupId>org.example</groupId>
<artifactId>spi-client</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
测试函数, org.example.spi.Example
package org.example.spi;
import java.util.Iterator;
import java.util.ServiceLoader;
public class Example {
public static void main(String[] args) {
ServiceLoader<Provider> load = ServiceLoader.load(Provider.class);
Iterator<Provider> iterator = load.iterator();
while (iterator.hasNext()) {
iterator.next().find();
}
}
}
运行结果为
Connected to the target VM, address: '127.0.0.1:56052', transport: 'socket'
spi-client implements the interface of spi-provider.find
Disconnected from the target VM, address: '127.0.0.1:56052', transport: 'socket'
Process finished with exit code 0