前言
SPI 全称为 Service Provider Interface,是一种服务发现机制。SPI 的本质是将接口实现类的全限定名配置在文件中,并由服务加载器读取配置文件,加载实现类。这样可以在运行时,动态为接口替换实现类。正因此特性,我们可以很容易的通过 SPI 机制为我们的程序提供拓展功能。例如现在我们设计了一款全新的日志框架:super-logger。默认以 XML 文件作为我们这款日志的配置文件,并设计了一个配置文件解析的接口:
package com.zhy.com.demo.spi;
public interface SuperLoggerConfiguration {
void configure(String configFile);
}
然后来一个默认的 XML 实现:
package com.zhy.com.demo.spi;
public class XMLConfiguration implements SuperLoggerConfiguration{
public void configure(String configFile){
......
}
}
那么我们在初始化,解析配置时,只需要调用这个 XMLConfiguration 来解析 XML 配置文件即可。
package com.zhy.com.demo.spi;
public class LoggerFactory {
static {
SuperLoggerConfiguration configuration = new XMLConfiguration();
configur