API: 接口定义在实现方
SPI: 接口定义在调用方
SPI的含义:
Service Provider Interface : 提供给服务提供厂商与扩展框架功能的开发者使用的接口
通过Java SPI机制,我们就可以在不修改Jar包或者框架的时候为API提供新实现。
使用场景:
比如确认收货超时的需求:
对于不同的类型的订单,确认收货超时的时间不一样。
我们可以定义接口,对于每种类型订单,去匹配不同的超时任务处理的实现接口。
这样可以很容易扩展新的功能。
很多框架都使用了Java的SPI机制,如java.sql.Driver的SPI实现, common-logging的日志接口等。