SPI
SPI全称Service Provider Interface,是Java提供的一套用来被第三方实现或者扩展的API,它可以用来启用框架扩展和替换组件。
Java SPI 实际上是“基于接口的编程+策略模式+配置文件”组合实现的动态加载机制。
实现
1、定义接口
public interface Animal {
void say();
}
2、接口实现类
public class Cat implements Animal {
@Override
public void say() {
System.out.println("i'm a cat");
}
}
public class Dog implements Animal {
@Override
public void say() {
System.out.println("i'm a dog");
}
}
3、在META-INF/services目录下创建和配置对应的文件

com.vincent.spi.Cat com.vincent.spi.Dog
4、测试
public class SPIMain {
public static void main(String[] args) {
ServiceLoader<Animal> loaders =
ServiceLoader.load(Animal.class);
for (Animal animal : loaders) {
animal.say();
}
}
}
输出结果:
public class SPIMain {
public static void main(String[] args) {
ServiceLoader<Animal> loaders =
ServiceLoader.load(Animal.class);
for (Animal animal : loaders) {
animal.say();
}
}
}
5、应用
应用到java spi的框架还是很多的,如:
(1)spring的web包

(2)durid连接池

(3)数据库驱动加载


等等。。。
浙公网安备 33010602011771号