SPI(Service Provider Interface),一种服务提供发现机制,可以用来启用框架扩展和替换组件,主要是被框架的开发人员使用,比如java.sql.Driver接口。
创建myspi的接口
package com.huoxing.myStudy.service;
public interface MySpi {
void sayHello();
}
创建实现类demo1,和demo2
package com.huoxing.myStudy.service.impl;
import com.huoxing.myStudy.service.MySpi;
public class MySpi1 implements MySpi {
@Override
public void sayHello() {
System.out.println("我是spidemo2");
}
}
package com.huoxing.myStudy.service.impl;
import com.huoxing.myStudy.service.MySpi;
public class Myspi2 implements MySpi {
@Override
public void sayHello() {
System.out.println("我是 spidemo2");
}
}
在resources目录下创建demo1,达成jar包
其他项目通过ServiceLoader.load(MySpi.class)使用此jar包
import com.huoxing.myStudy.service.MySpi;
import java.util.ServiceLoader;
public class SpiTest {
public static void main(String[] args) {
ServiceLoader<MySpi> serviceLoader = ServiceLoader.load(MySpi.class);
// 执行不同厂商的业务实现,具体根据业务需求配置
for (MySpi mySPI : serviceLoader) {
mySPI.sayHello();
}
}
}
可以使用Dubbo对其进行增强,Dubbo会先从缓存中读取
ExtensionLoader<Animal> extensionLoader = ExtensionLoader.getExtensionLoader(Animal.class);