關于JAVA 的SP I 想必大家都有所耳聞、知道其提供的功能以及使用方式彩掐。
但到底如何理解它构舟,以及它面向哪種場景來用的,這些話題是本篇文章的核心堵幽。
一句話理解:SPI是當我們身為框架開發(fā)者時候狗超,在你無法形成絕對規(guī)范、強制使用者按照規(guī)范去使用的的時候朴下,"放權" 往往是比較明智的選擇努咐,適當讓使用者去自定義實現(xiàn)。
例子:公司讓你寫一個對象存儲的服務組件殴胧,然后下放給其他業(yè)務部門使用渗稍。你努努力,實現(xiàn)了阿里云OSS团滥,騰訊COS竿屹、華為對象存儲等實現(xiàn),供業(yè)務部門使用灸姊。這時候A部門跳出來說拱燃,他們用的七牛的kodo;B部門說力惯,他們用的HDFS碗誉,這時候你咋辦?你接著自己去增加這些實現(xiàn)嗎夯膀?不現(xiàn)實诗充,量太大了。這時候诱建,最好的方式就是蝴蜓,提供一個口子,供使用者按自己的需求俺猿,自己去實現(xiàn)茎匠。
這個時候SPI就發(fā)揮作用了。
SPI的功能以及使用方式押袍,可以支持公司部門內(nèi)部诵冒,引入你的組件后,在不用更改你組件源碼的前提下谊惭,面向SPI接口汽馋,在他們自己的業(yè)務項目內(nèi)部去自己增加實現(xiàn)侮东。
問題完美解決。