API和SPI

        API(Application Programming Interface )。在java中,我們使用java提供的很多類、類的方法、數據結構來編寫我們的應用程序,最終完成我們需求的程序功能,這裏的類、方法、數據結構即是jdk提供的api。api的意義,其實就是這些提供給你完成某項功能的類、接口或者方法。                                                                                                                                                                    API直接爲你提供了功能,你使用API就能完成任務。
        SPI(Service Provider Interface)是指一些提供給你繼承、擴展,完成自定義功能的類、接口或者方法。
        SPI是一種回調的思想,回調是指我們在使用api時,我們可以向api傳入一個類或者方法,api在合適的時間調用類或者方法。SPI是在一些通用的標準中,爲標準的實現產商提供的擴展點。標準在上層提供API,API內部使用了SPI,當API被客戶使用時,會動態得從當前運行的classpath中尋找該SPI的實現,然後使用該SPI的實現來完成API的功能。
         SPI的實現方式是:提供實現的實現類打包成Jar文件,這個Jar文件裏面必須有META-INF目錄,其下又有services目錄,其下有一個文本文件,文件名即爲SPI接口的全名,文件的內容該jar包中提供的SPI接口的實現類名。
舉一個著名的例子:
         mysql的驅動包提供了java.sql.Driver這個SPI的實現,實現類是com.mysql.jdbc.Driver,在mysql-connector-java-5.1.6.jar中,我們可以看到有一個META-INF/services目錄,目錄下有一個文件名爲java.sql.Driver的文件,其中的內容是com.mysql.jdbc.Driver。 
在運行DriverManager.getDriver並傳入參數“com.mysql.jdbc.Driver”時,DriverManager會從mysql-connector-java-5.1.6.jar中找到com.mysql.jdbc.Driver並實例化返回一個com.mysql.jdbc.Driver的實例。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章