前言
Java SPI(Service Provider Interface)是Java官方提供的一种服务发现机制,它允许在运行时动态地加载实现特定接口的类,而不需要在代码中显式地指定该类,从而实现解耦和灵活性
SPI实现
定义一个接口
package cn.com.ut.march.spi;
public interface HelloService {
void study(String data);
}
接口实现
1、定义StudentServiceImpl实现HelloService方法
package cn.com.ut.march.spi.impl;
import cn.com.ut.march.spi.HelloService;
public class StudentServiceImpl implements HelloService {
@Override
public void study(String data) {
System.out.println("StudentServiceImpl被调用:" + data);
}
}
2、定义PersonServiceImpl实现HelloService方法
3、然后再resources目录下,创建文件夹路径为META-INF/services
创建文件cn.com.ut.march.spi.HelloService,其中cn.com.ut.march.spi为包路径,文件内容为
cn.com.ut.march.spi.impl.PersonServiceImpl
cn.com.ut.march.spi.impl.StudentServiceImpl
4、定义一个main函数
package cn.com.ut.march.spi;
import java.util.Iterator;
import java.util.ServiceLoader;
public class ServiceLoaderTest {
public static void main(String[] args) {
ServiceLoader<HelloService> serviceLoader = ServiceLoader.load(HelloService.class);
Iterator<HelloService> iterator = serviceLoader.iterator();
while (iterator.hasNext()) {
HelloService service = iterator.next();
service.study("ssss");
}
}
}
输出结果为
总结
可以利用SPI机制更好实现类的加载等,比如Spring或者MySQL驱动加载等,都是很好利用了SPI机制