SPI的概念在一些文章里经常能遇见,SPI(Service Provider Interface)顾名思义即服务提供者接口,其是一组将被服务提供方(第三方)实现,扩展的应用程序接口(API),服务提供方通过实现SPI实现具体服务。
SPI本身是一个一般化的概念,可以应用于不同的平台中。
Java平台中,一项服务定义了一组已知的接口和(abstract)类,服务提供者实现,扩展了定义在服务本身内的接口和类,是服务本身的一个特定的具体实现,一项服务可以被多个不同的服务提供者实现。
服务提供者可以通过扩展的形式安装到Java平台,也就是把JAR包放到常规的扩展目录下,也可以通过把服务提供者放到应用程序的classpath下使其在应用程序中可用,此外,一些特定的平台有着其特有的安装方式。
Java平台中,SPI有着广泛的应用,比如:Java Cryptography Extension(JCE),Java Naming and Directory Interface(JNDI),Java Sound,Java Image I/O,Java API for XML Processing(JAXP),以及非常常见的Java Database Connectivity(JDBC)。
SPI让程序更加具有扩展性,让程序组件具有更好的可替换性,SPI使程序更加灵活,更易复用,更松耦合。