电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

詳解JAVA SPI機制和使用方法

瀏覽:7日期:2022-08-31 13:00:25

JAVA SPI 簡介

SPI 是 Java 提供的一種服務加載方式,全名為 Service Provider Interface。根據 Java 的 SPI 規范,我們可以定義一個服務接口,具體的實現由對應的實現者去提供,即服務提供者。然后在使用的時候再根據 SPI 的規范去獲取對應的服務提供者的服務實現。通過 SPI 服務加載機制進行服務的注冊和發現,可以有效的避免在代碼中將具體的服務提供者寫死。從而可以基于接口編程,實現模塊間的解耦。

SPI 機制的約定

1 在 META-INF/services/ 目錄中創建以接口全限定名命名的文件,該文件內容為API具體實現類的全限定名

2 使用 ServiceLoader 類動態加載 META-INF 中的實現類

3 如 SPI 的實現類為 Jar 則需要放在主程序 ClassPath 中

4 API 具體實現類必須有一個不帶參數的構造方法

SPI 應用場景舉例

JDBC

jdbc4.0以前, 開發人員還需要基于Class.forName('xxx')的方式來裝載驅動,jdbc4也基于spi的機制來發現驅動提供商了,可以通過METAINF/services/java.sql.Driver文件里指定實現類的方式來暴露驅動提供者.

COMMON-LOGGING

apache最早提供的日志的門面接口。只有接口,沒有實現。具體方案由各提供商實現, 發現日志提供商是通過掃描METAINF/services/org.apache.commons.logging.LogFactory配置文件,通過讀取該文件的內容找到日志提工商實現類。只要我們的日志實現里包含了這個文件,并在文件里制定 LogFactory工廠接口的實現類即可。

SPI 機制代碼示例

接口 People.java

package org.louis.spi.test;public interface People { public String speak();}

實現類 Chinese.java

package org.louis.spi.test; public class Chinese implements People{ public String speak() { return 'Chinese speak Chinese.'; } }

實現類 American.java

package org.louis.spi.test; public class American implements People{ public String speak() { return 'American speak English.'; } }

創建一個文件,放置到 META-INF/Services 目錄:

文件名:org.louis.spi.test.People

文件內容:

org.louis.spi.test.Chineseorg.louis.spi.test.American

新建一個測試工程,引入以上代碼生成的Jar包

測試類SpiTest.java

package org.louis.test; import java.util.Iterator;import java.util.ServiceLoader; import org.louis.spi.test.People;import org.louis.spi.test.Chinese;import org.louis.spi.test.American; public class SpiTest { public static void main(String[] args) { ServiceLoader<People> peoples = ServiceLoader.load(People.class); Iterator<IOperation> iterator = peoples.iterator(); while (iterator.hasNext()) { People people = iterator.next(); System.out.println(people.speak()); } } }

運行結果:

Chinese speak Chinese.

American speak English.

通過上面例子,我們看到,假如我要新加入一個韓國人的實現,那只需要新建一個新的工程,創建一個Koeran類實現People接口,并在自己工程 META-INF/Services 目錄下放置一個配置文件指定Koeran實現類,將工程打成Jar包,就完成了一個新的服務實現的開發。

以上就是示例講解JAVA SPI機制的詳細內容,更多關于JAVA SPI機制的資料請關注好吧啦網其它相關文章!

標簽: Java
相關文章:
主站蜘蛛池模板: 无锡网站建设_小程序制作_网站设计公司_无锡网络公司_网站制作 | 莱州网络公司|莱州网站建设|莱州网站优化|莱州阿里巴巴-莱州唯佳网络科技有限公司 | 不锈钢管件(不锈钢弯头,不锈钢三通,不锈钢大小头),不锈钢法兰「厂家」-浙江志通管阀 | 附着力促进剂-尼龙处理剂-PP处理剂-金属附着力处理剂-东莞市炅盛塑胶科技有限公司 | 老城街小面官网_正宗重庆小面加盟技术培训_特色面馆加盟|牛肉拉面|招商加盟代理费用多少钱 | 深圳彩钢板_彩钢瓦_岩棉板_夹芯板_防火复合彩钢板_长鑫 | 进口试验机价格-进口生物材料试验机-西安卡夫曼测控技术有限公司 | 伸缩器_伸缩接头_传力接头-巩义市润达管道设备制造有限公司 | 密集架|电动密集架|移动密集架|黑龙江档案密集架-大量现货厂家销售 | 磁力抛光机_磁力研磨机_磁力去毛刺机_精密五金零件抛光设备厂家-冠古科技 | 警方提醒:赣州约炮论坛真的安全吗?2025年新手必看的网络交友防坑指南 | 威海防火彩钢板,威海岩棉复合板,威海彩钢瓦-文登区九龙岩棉复合板厂 | 合景一建-无尘车间设计施工_食品医药洁净车间工程装修总承包公司 | 流量检测仪-气密性检测装置-密封性试验仪-东莞市奥图自动化科技有限公司 | 新材料分散-高速均质搅拌机-超声波分散混合-上海化烁智能设备有限公司 | 真空粉体取样阀,电动楔式闸阀,电动针型阀-耐苛尔(上海)自动化仪表有限公司 | 除甲醛公司-甲醛检测治理-杭州创绿家环保科技有限公司-室内空气净化十大品牌 | 杭州高温泵_热水泵_高温油泵|昆山奥兰克泵业制造有限公司 | 酒糟烘干机-豆渣烘干机-薯渣烘干机-糟渣烘干设备厂家-焦作市真节能环保设备科技有限公司 | 滤芯,过滤器,滤油机,贺德克滤芯,精密滤芯_新乡市宇清流体净化技术有限公司 | 防爆型气象站_农业气象站_校园气象站_农业四情监测系统「山东万象环境科技有限公司」 | 陕西安闸机-伸缩门-车牌识别-广告道闸——捷申达门业科技 | 圣才学习网-考研考证学习平台,提供万种考研考证电子书、题库、视频课程等考试资料 | 皮带式输送机械|链板式输送机|不锈钢输送机|网带输送机械设备——青岛鸿儒机械有限公司 | 北京翻译公司_同传翻译_字幕翻译_合同翻译_英语陪同翻译_影视翻译_翻译盖章-译铭信息 | 长沙中央空调维修,中央空调清洗维保,空气能热水工程,价格,公司就找维小保-湖南维小保环保科技有限公司 | 交流伺服电机|直流伺服|伺服驱动器|伺服电机-深圳市华科星电气有限公司 | 长江船运_国内海运_内贸船运_大件海运|运输_船舶运输价格_钢材船运_内河运输_风电甲板船_游艇运输_航运货代电话_上海交航船运 | 安全光栅|射频导纳物位开关|音叉料位计|雷达液位计|两级跑偏开关|双向拉绳开关-山东卓信机械有限公司 | 全自动五线打端沾锡机,全自动裁线剥皮双头沾锡机,全自动尼龙扎带机-东莞市海文能机械设备有限公司 | 电池挤压试验机-自行车喷淋-车辆碾压试验装置-深圳德迈盛测控设备有限公司 | 淄博不锈钢无缝管,淄博不锈钢管-鑫门物资有限公司 | 淋巴细胞分离液_口腔医疗器材-精欣华医疗器械(无锡)有限公司 | 楼承板-开口楼承板-闭口楼承板-无锡海逵 | 合肥展厅设计-安徽展台设计-合肥展览公司-安徽奥美展览工程有限公司 | 杭州高温泵_热水泵_高温油泵|昆山奥兰克泵业制造有限公司 | 六维力传感器_六分量力传感器_模腔压力传感器-南京数智微传感科技有限公司 | 臭氧发生器_臭氧消毒机 - 【同林品牌 实力厂家】 | 钢格板|热镀锌钢格板|钢格栅板|钢格栅|格栅板-安平县昊泽丝网制品有限公司 | 旅游规划_旅游策划_乡村旅游规划_景区规划设计_旅游规划设计公司-北京绿道联合旅游规划设计有限公司 | 生物颗粒燃烧机-生物质燃烧机-热风炉-生物颗粒蒸汽发生器-丽水市久凯能源设备有限公司 |