阅读本文大概需要 4 分钟。
来自:https://c1n.cn/my8R6
SPI 机制应用在了大家项目中的很多地方,在很多框架中也有普遍应用,只不过很多人并没有感知。
举个例子,为什么我们在项目中引入 mysql-connector 的 jar 包,就可以直接连接 MySQL 数据库了?
SPI
Java SPI
// 接口
public interface Superman {
void introduce();
}
// 实现类1
public class IronMan implements Superman{
@Override
public void introduce() {
System.out.println("我是钢铁侠!");
}
}
// 实现类2
public class CaptainAmerica implements Superman {
@Override
public void introduce() {
System.out.println("我是美国队长!");
}
}
public static void main(String[] args) {
ServiceLoader<Superman> serviceLoader = ServiceLoader.load(Superman.class);
System.out.println("Java SPI:");
serviceLoader.forEach(Superman::introduce);
}
serviceLoader 只能通过 Iterator 形式遍历获取,不能根据参数获取指定的某个实现类。
Spring SPI
Dubbo SPI
Java、Spring、Dubbo SPI 对比
推荐阅读:
内容包含Java基础、JavaWeb、MySQL性能优化、JVM、锁、百万并发、消息队列、高性能缓存、反射、Spring全家桶原理、微服务、Zookeeper......等技术栈!
⬇戳阅读原文领取! 朕已阅