Java 的spi機制

當服務的提供者,提供了服務接口的一種實現之后,在jar包的META-INF/services/目錄里同時創(chuàng)建一個以服務接口命名的文件。

例如:

該文件里就是實現該服務接口的具體實現類。而當外部程序裝配這個模塊的時候,就能通過該jar包META-INF/services/里的配置文件找到具體的實現類名,并裝載實例化,完成模塊的注入。

基于這樣一個約定就能很好的找到服務接口的實現類,而不需要再代碼里制定。

jdk提供服務實現查找的一個工具類:java.util.ServiceLoader

假設有一個內容搜索系統(tǒng),分為展示和搜索兩個模塊。展示和搜索基于接口編程。搜索的實現可能是基于文件系統(tǒng)的搜索,也可能是基于數據庫的搜索。

1.你可能會定義一個搜索接口


2。具體搜索實現,可以是去文件中,也可能是去數據庫搜索

3。一般的調用方法是Class.forName("xxx") 反射加載,那么這里呢,不是通過那種方式加載你想要的實現的,而是通過ServiceLoader.load方法,最后創(chuàng)建在META-INF/searvices/search.Search文件。

當search.Search文件內容是"search.FileSearch"時,程序輸出是:

now use file system search. keyword:test

當search.Search文件內容是"search.DatabaseSearch"時,程序輸出是:

now use database search. keyword:test

可以看出SearchTest里沒有任何和具體實現有關的代碼,而是基于spi的機制去查找服務的實現

這樣基本上就理解了spi機制

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現,斷路器,智...
    卡卡羅2017閱讀 136,506評論 19 139
  • Spring Boot 參考指南 介紹 轉載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,253評論 6 342
  • SPI,Service Provider Interface,主要是被框架的開發(fā)人員使用,比如java.sql.D...
    加大裝益達閱讀 1,736評論 2 12
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,741評論 25 709
  • 追 逐 ——遠意 青春是那蔥郁的春 總會有無數的鮮花次第點綴 多么豐富的顏色 讓人陶醉 青春也有許多夢想 像萬花...
    遠意閱讀 270評論 4 5

友情鏈接更多精彩內容