它就是一種動態替換髮現的機制,能夠在運行時動態的給接口添加實現html
SPI機制的約定:.net
1) 在META-INF/services/目錄中建立以接口全限定名命名的文件該文件內容爲Api具體實現類的全限定名htm
2) 使用ServiceLoader類動態加載META-INF中的實現類blog
3) 如SPI的實現類爲Jar則須要放在主程序classPath中接口
4) Api具體實現類必須有一個不帶參數的構造方法it
模塊間的依賴應該針對接口,不該該依賴實現類,若是寫了那替換實現類時須要修改代碼。而spi就是解決這個問題的,依賴接口,實現類經過spi機制處理,完成了接口的實現類發現機制。經過配置進行接口實現的插拔,改實現類只須要改配置文件尋找新的實現類便可。class
https://www.cnblogs.com/zhongkaiuu/articles/5040971.html配置
http://blog.csdn.net/zmx729618/article/details/53285416service
http://blog.csdn.net/qq924862077/article/details/52778135程序
http://mars914.iteye.com/blog/1283859