在面向?qū)ο蟮某绦蛟O(shè)計(jì)中,模塊之間交互采用接口編程,通常情況下調(diào)用方不需要知道被調(diào)用方的內(nèi)部實(shí)現(xiàn)細(xì)節(jié),因?yàn)橐坏┥婕暗搅司唧w實(shí)現(xiàn),如果需要換一種實(shí)現(xiàn)就需要修改代碼,這違反了程序設(shè)計(jì)的"開閉原則"。所以我們一般有兩種選擇:一種是使用API(Application Programming Interface),另一種是SPI(Service Provider Interface),API通常被應(yīng)用程序開發(fā)人員使用,而SPI通常被框架擴(kuò)展人員使用。
創(chuàng)新互聯(lián)建站專業(yè)為企業(yè)提供北海網(wǎng)站建設(shè)、北海做網(wǎng)站、北海網(wǎng)站設(shè)計(jì)、北海網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、北海企業(yè)網(wǎng)站模板建站服務(wù),10多年北海做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
在進(jìn)入下面學(xué)習(xí)之前,我們先來再加深一下API和SPI這兩個(gè)的印象:
API:由實(shí)現(xiàn)方制定接口標(biāo)準(zhǔn)并完成對接口的不同實(shí)現(xiàn),這種模式服務(wù)接口從概念上更接近于實(shí)現(xiàn)方;
SPI:由調(diào)用方制定接口標(biāo)準(zhǔn),實(shí)現(xiàn)方來針對接口提供不同的實(shí)現(xiàn);從前半句話我們來看,SPI其實(shí)就是"為接口查找實(shí)現(xiàn)"的一種服務(wù)發(fā)現(xiàn)機(jī)制;這種模式,服務(wù)接口組織上位于調(diào)用方所在的包中,實(shí)現(xiàn)位于獨(dú)立的包中。
API和SPI簡略圖示:
看完上面的簡單圖示,相信大家對API和SPI的區(qū)別有了一個(gè)大致的了解,現(xiàn)在我們使用SPI機(jī)制來實(shí)現(xiàn)我們一個(gè)簡單的日志框架:
第一步,創(chuàng)建一個(gè)maven項(xiàng)目命名為spi-interface,定義一個(gè)SPI對外服務(wù)接口,用來后續(xù)提供給調(diào)用者使用;
package cn.com.wwh; /** * * @FileName Logger.java *@version:1.0 * @Description: 服務(wù)提供者接口 *@author: wwh * @date: 2022年9月19日 上午10:31:53 */ public interface Logger { /** * * @Description:(功能描述) *@param msg */ public void info(String msg); /** * * @Description:(功能描述) *@param msg */ public void debug(String msg); }