spi,簡單來說,就是service provider inte***ce,說白了是什麼意思呢,比如你有個介面,現在這個介面有3個實現類,那麼在系統執行的時候對這個介面到底選擇哪個實現類呢?這就需要spi了,需要根據指定的配置或者是預設的配置,去找到對應的實現類載入進來,然後用這個實現類的例項物件。
介面a -> 實現a1,實現a2,實現a3
配置一下,介面a = 實現a2
在系統實際執行的時候,會載入你的配置,用實現a2例項化乙個物件來提供服務
比如說你要通過jar包的方式給某個介面提供實現,然後你就在自己jar包的meta-inf/services/目錄下放乙個跟介面同名的檔案,裡面指定介面的實現裡是自己這個jar包裡的某個類。ok了,別人用了乙個介面,然後用了你的jar包,就會在執行的時候通過你的jar包的那個檔案找到這個介面該用哪個實現類。
這是jdk提供的乙個功能。
比如說你有個工程a,有個介面a,介面a在工程a裡是沒有實現類的 -> 系統在執行的時候,怎麼給介面a選擇乙個實現類呢?
你就可以自己搞乙個jar包,meta-inf/services/,放上乙個檔案,檔名就是介面名,介面a,介面a的實現類=com.zhss.service.實現類a2。讓工程a來依賴你的這個jar包,然後呢在系統執行的時候,工程a跑起來,對介面a,就會掃瞄自己依賴的所有的jar包,在每個jar裡找找,有沒有meta-inf/services資料夾,如果有,在裡面找找,有沒有介面a這個名字的檔案,如果有在裡面找一下你指定的介面a的實現是你的jar包裡的哪個類?
Dubbo面試 dubbo的工作原理
說一下的 dubbo 的工作原理?註冊中心掛了可以繼續通訊嗎?說說一次 rpc 請求的流程?mq es redis dubbo,上來先問你一些思考的問題,原理 kafka 高可用架構原理 es 分布式架構原理 redis 執行緒模型原理 dubbo 工作原理 生產環境裡可能會碰到的一些問題 每種技術...
dubbo系列 對使用dubbo的建議
原因如下 provider 上盡量多配置 consumer 端的屬性,讓 provider 實現者一開始就思考 provider 服務特點 服務質量的問題。示例 inte ce com.alibaba.hello.api.helloservice version 1.0.0 ref helloser...
最後的筆記系列2 5
mysql和mysqli的區別?mysqli是php的 extension 擴充套件.採用的是物件導向的語法,比如 unset mysqli mysqli new mysqli host user passwd db toconn 而並不是 具有另外乙個資料庫,叫什麼mysqli的 由memory單...