小編這次要給大家分享的是詳解JAVA SPI機(jī)制以及使用方法,文章內(nèi)容豐富,感興趣的小伙伴可以來了解一下,希望大家閱讀完這篇文章之后能夠有所收獲。
JAVA SPI 簡介
SPI 是 Java 提供的一種服務(wù)加載方式,全名為 Service Provider Interface。根據(jù) Java 的 SPI 規(guī)范,我們可以定義一個(gè)服務(wù)接口,具體的實(shí)現(xiàn)由對(duì)應(yīng)的實(shí)現(xiàn)者去提供,即服務(wù)提供者。然后在使用的時(shí)候再根據(jù) SPI 的規(guī)范去獲取對(duì)應(yīng)的服務(wù)提供者的服務(wù)實(shí)現(xiàn)。通過 SPI 服務(wù)加載機(jī)制進(jìn)行服務(wù)的注冊(cè)和發(fā)現(xiàn),可以有效的避免在代碼中將具體的服務(wù)提供者寫死。從而可以基于接口編程,實(shí)現(xiàn)模塊間的解耦。
SPI 機(jī)制的約定
1 在 META-INF/services/ 目錄中創(chuàng)建以接口全限定名命名的文件,該文件內(nèi)容為API具體實(shí)現(xiàn)類的全限定名
2 使用 ServiceLoader 類動(dòng)態(tài)加載 META-INF 中的實(shí)現(xiàn)類
3 如 SPI 的實(shí)現(xiàn)類為 Jar 則需要放在主程序 ClassPath 中
4 API 具體實(shí)現(xiàn)類必須有一個(gè)不帶參數(shù)的構(gòu)造方法
SPI 應(yīng)用場景舉例
JDBC
jdbc4.0以前, 開發(fā)人員還需要基于Class.forName("xxx")的方式來裝載驅(qū)動(dòng),jdbc4也基于spi的機(jī)制來發(fā)現(xiàn)驅(qū)動(dòng)提供商了,可以通過METAINF/services/java.sql.Driver文件里指定實(shí)現(xiàn)類的方式來暴露驅(qū)動(dòng)提供者.
COMMON-LOGGING
apache最早提供的日志的門面接口。只有接口,沒有實(shí)現(xiàn)。具體方案由各提供商實(shí)現(xiàn), 發(fā)現(xiàn)日志提供商是通過掃描METAINF/services/org.apache.commons.logging.LogFactory配置文件,通過讀取該文件的內(nèi)容找到日志提工商實(shí)現(xiàn)類。只要我們的日志實(shí)現(xiàn)里包含了這個(gè)文件,并在文件里制定 LogFactory工廠接口的實(shí)現(xiàn)類即可。
SPI 機(jī)制代碼示例
接口 People.java
package org.louis.spi.test; public interface People { public String speak(); }
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)建站aaarwkj.com,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
名稱欄目:詳解JAVASPI機(jī)制以及使用方法-創(chuàng)新互聯(lián)
本文路徑:http://aaarwkj.com/article36/pjpsg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗(yàn)、網(wǎng)站制作、靜態(tài)網(wǎng)站、外貿(mào)建站、企業(yè)網(wǎng)站制作、網(wǎng)站營銷
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容