这里有个
精准的定义:
http://en.wikipedia.org/wiki/Service_provider_interface
spi发现机制:
1. jdk有一套以java.util.ServiceLoader为核心的机制。 ServiceLoader会从类路径查找做了相关META-INF声明的jar包,所以上层不必耦合SPI具体实现的类。
2. 其实用spring IoC搞更直观
spi跟api在语言层面的联系:有两种模式
1. spi即api,具体的类实现指定的接口。比如Tomcat的Request类实现HttpServletRequest
2. spi本身采用interface/implementation机制,接口中提供的方法直接贴近底层或者只用作工厂,不为用户所知;然后,spi接口作为api的成员变量,api在有需要时调用spi完成工作