關(guān)于JAVA 的SP I 想必大家都有所耳聞、知道其提供的功能以及使用方式。
但到底如何理解它,以及它面向哪種場景來用的,這些話題是本篇文章的核心。
一句話理解:SPI是當(dāng)我們身為框架開發(fā)者時候,在你無法形成絕對規(guī)范、強(qiáng)制使用者按照規(guī)范去使用的的時候,"放權(quán)" 往往是比較明智的選擇,適當(dāng)讓使用者去自定義實(shí)現(xiàn)。
例子:公司讓你寫一個對象存儲的服務(wù)組件,然后下放給其他業(yè)務(wù)部門使用。你努努力,實(shí)現(xiàn)了阿里云OSS,騰訊COS、華為對象存儲等實(shí)現(xiàn),供業(yè)務(wù)部門使用。這時候A部門跳出來說,他們用的七牛的kodo;B部門說,他們用的HDFS,這時候你咋辦?你接著自己去增加這些實(shí)現(xiàn)嗎?不現(xiàn)實(shí),量太大了。這時候,最好的方式就是,提供一個口子,供使用者按自己的需求,自己去實(shí)現(xiàn)。
這個時候SPI就發(fā)揮作用了。
SPI的功能以及使用方式,可以支持公司部門內(nèi)部,引入你的組件后,在不用更改你組件源碼的前提下,面向SPI接口,在他們自己的業(yè)務(wù)項(xiàng)目內(nèi)部去自己增加實(shí)現(xiàn)。
問題完美解決。