SpringBoot 3的两种SPI加载方式
SpringBoot 3 中并没有正式发布,因此这里假设你是指SpringBoot 2.x或SpringBoot 1.x版本。SpringBoot使用ServiceLoader进行SPI的加载主要有两种方式:
- 注解方式:使用
@EnableConfigurationProperties
和@ConfigurationProperties
注解来绑定配置文件中的属性到Java对象。 - Java ServiceLoader方式:使用Java原生的ServiceLoader来加载SPI接口的实现类。
以下是使用Java ServiceLoader方式加载SPI接口实现类的示例代码:
import java.util.ServiceLoader;
public class ServiceLoaderExample {
public static void main(String[] args) {
ServiceLoader<MyService> loader = ServiceLoader.load(MyService.class);
for (MyService service : loader) {
service.execute();
}
}
}
interface MyService {
void execute();
}
在META-INF/services
目录下创建一个文件,文件名为SPI接口的全限定名,文件内容为实现类的全限定名,每个实现类占一行。
例如,如果有一个实现了MyService的类MyServiceImpl,则需要在项目的META-INF/services
目录下创建一个文件名为com.example.MyService
的文件,文件内容如下:
com.example.MyServiceImpl
这样,当使用ServiceLoader加载MyService接口时,MyServiceImpl类就会被自动加载并实例化。
评论已关闭