SPI ,全稱為 Service Provider Interface,是一種服務發現機制。它通過在ClassPath路徑下的META-INF/services文件夾查找文件,自動加載文件里所定義的類。
使用SPI:
1.定義SPI接口
2.定義SPI接口實現類
3.在資源文件目錄下創建 META-INF/services 目錄,在目錄下添加SPI接口全限定類名文件
4.在創建的文件里添加SPI接口實現類的全限定類名
5.定義執行方法,ServiceLoader.load()或Service.providers()兩個方法加載所定義的類
6.通過上面說到的兩個類各自實現的Iterator 獲取實現類
原理剖析:
1.為什么要在ClassPath:META-INF/services 下創建文件?
源碼里定義的路徑
2.通過什么實現的?
實現一個Iterator並傳入加載類型和加載器,如果沒有實現加載器,會使用默認加載器Thread.currentThread().getContextClassLoader() 獲取實現類。