??SPI 全称是 Service Provider Interface ,它是 JDK 内置的一种动态扩展点的实现。
简单来说,就是我们可以定义一个标准的接口,然后第三方的库里面可以实现这个接口。
那么,程序在运行的时候,会根据配置信息动态加载第三方实现的类,从而完成功能的动态扩展机制。
??在 Java 里面, SPI 机制有一个非常典型的实现案例, 就是数据库驱动 java.jdbc.Driver
??JDK 里面定义了数据库驱动类 Driver,它是一个接口,JDK 并没有提供实现。具体的实现是由第三方数据库厂商来完成的。
??在程序运行的时候,会根据我们声明的驱动类型,来动态加载对应的扩展实现, 从而完成数据库的连接。
??除此之外,在很多开源框架里面都借鉴了 Java SPI 的思想,提供了自己的 SPI
框架,
??比如:
??Dubbo 定义了 ExtensionLoader,实现功能的扩展。
??Spring 提供了 SpringFactoriesLoader,实现外部功能的集成。以上就是我对这个问题的理解!