Java SPI机制
java SPI机制
概念:SPI(Service Provider Interface),JDK内置的服务发现机制,由工具类java.util.ServiceLoader提供相应的支持。其中有俩个重要概念:
- Service:通常是接口或抽象类,具体类也可以(但不推荐)
- Service Provider:服务提供者,服务具体实现类
作用:SPI可以通过在ClassPath路径下META-INF/service文件夹中查找和Service全限定名相同的文件,并自动加载文件中所指定的Service Provider全限定名的类。#符号作为注释
实现原理:SPI使用简单而且原理也非常简单,SPI加载服务的方式就是通过 ClassLoader.getResources 方法找到 META-INF/services 目录下的相应文件,然后解析文件得到服务提供者的类名。最后通过 Class.forName() -> clazz.newInstance() 得到实例返回。
SPI和API区别:
应用:JDK,Spring,Dubbo,JDBC,SLF4j日志体系中都是用了SPI机制
Simple Accomplish
JDK实现SPI
首先准备接口和接口实现类
接口:
package com.spi;
public interface service {
public void print();
}
接口实现类:
package com.spi;
public class serviceimpl implements service {
public void print() {
System.out.println("Hello SPI");
}
}
META-INF/service文件夹下:

最后使用Test类测试一下


浙公网安备 33010602011771号