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

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

詳解JAVA SPI機制和使用方法

瀏覽:6日期: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
相關文章:
主站蜘蛛池模板: 双工位钻铣攻牙机-转换工作台钻攻中心-钻铣攻牙机一体机-浙江利硕自动化设备有限公司 | 卷筒电缆-拖链电缆-特种柔性扁平电缆定制厂家「上海缆胜」 | 南京试剂|化学试剂|分析试剂|实验试剂|cas号查询-专业60年试剂销售企业 | 隔离变压器-伺服变压器--输入输出电抗器-深圳市德而沃电气有限公司 | 振动筛-交叉筛-螺旋筛-滚轴筛-正弦筛-方形摇摆筛「新乡振动筛厂家」 | loft装修,上海嘉定酒店式公寓装修公司—曼城装饰 | 圆周直径尺-小孔内视镜-纤维研磨刷-东莞市高腾达精密工具 | 意大利Frascold/富士豪压缩机_富士豪半封闭压缩机_富士豪活塞压缩机_富士豪螺杆压缩机 | 柔性输送线|柔性链板|齿形链-上海赫勒输送设备有限公司首页[输送机] | 重庆私家花园设计-别墅花园-庭院-景观设计-重庆彩木园林建设有限公司 | 环压强度试验机-拉链拉力试验机-上海倾技仪器仪表科技有限公司 | 电动卫生级调节阀,电动防爆球阀,电动软密封蝶阀,气动高压球阀,气动对夹蝶阀,气动V型调节球阀-上海川沪阀门有限公司 | 玉米深加工机械,玉米加工设备,玉米加工机械等玉米深加工设备制造商-河南成立粮油机械有限公司 | 环氧乙烷灭菌器_压力蒸汽灭菌器_低温等离子过氧化氢灭菌器 _低温蒸汽甲醛灭菌器_清洗工作站_医用干燥柜_灭菌耗材-环氧乙烷灭菌器_脉动真空压力蒸汽灭菌器_低温等离子灭菌设备_河南省三强医疗器械有限责任公司 | GEDORE扭力螺丝刀-GORDON防静电刷-CHEMTRONICS吸锡线-上海卓君电子有限公司 | 散热器-电子散热器-型材散热器-电源散热片-镇江新区宏图电子散热片厂家 | 交通信号灯生产厂家_红绿灯厂家_电子警察监控杆_标志杆厂家-沃霖电子科技 | 防爆电机生产厂家,YBK3电动机,YBX3系列防爆电机,YBX4节防爆电机--河南省南洋防爆电机有限公司 | 水热合成反应釜-防爆高压消解罐-西安常仪仪器设备有限公司 | 山东集装箱活动房|济南集装箱活动房-济南利森集装箱有限公司 | pH污水传感器电极,溶解氧电极传感器-上海科蓝仪表科技有限公司 | 合肥白癜风医院_合肥治疗白癜风医院_合肥看白癜风医院哪家好_合肥华研白癜风医院 | 水冷式工业冷水机组_风冷式工业冷水机_水冷螺杆冷冻机组-深圳市普威机械设备有限公司 | 寮步纸箱厂_东莞纸箱厂 _东莞纸箱加工厂-东莞市寮步恒辉纸制品厂 | 济南宣传册设计-画册设计_济南莫都品牌设计公司 | 定时排水阀/排气阀-仪表三通旋塞阀-直角式脉冲电磁阀-永嘉良科阀门有限公司 | 穿线管|波纹穿线管|包塑金属软管|蛇皮管?闵彬专注弱电工程? | 应急灯_消防应急灯_应急照明灯_应急灯厂家-大成智慧官网 | 气胀轴|气涨轴|安全夹头|安全卡盘|伺服纠偏系统厂家-天机传动 | 小学教案模板_中学教师优秀教案_高中教学设计模板_教育巴巴 | 海峰资讯 - 专注装饰公司营销型网站建设和网络营销培训 | 电动百叶窗,开窗器,电动遮阳百叶,电动开窗机生产厂家-徐州鑫友工控科技发展有限公司 | 脉冲布袋除尘器_除尘布袋-泊头市净化除尘设备生产厂家 | 滚筒烘干机_转筒烘干机_滚筒干燥机_转筒干燥机_回转烘干机_回转干燥机-设备生产厂家 | 欧盟ce检测认证_reach检测报告_第三方检测中心-深圳市威腾检验技术有限公司 | 济南货架定做_仓储货架生产厂_重型货架厂_仓库货架批发_济南启力仓储设备有限公司 | 塑木弯曲试验机_铜带拉伸强度试验机_拉压力测试台-倾技百科 | RTO换向阀_VOC高温阀门_加热炉切断阀_双偏心软密封蝶阀_煤气蝶阀_提升阀-湖北霍科德阀门有限公司 | 企典软件一站式企业管理平台,可私有、本地化部署!在线CRM客户关系管理系统|移动办公OA管理系统|HR人事管理系统|人力 | 工业洗衣机_工业洗涤设备_上海力净工业洗衣机厂家-洗涤设备首页 bkzzy在职研究生网 - 在职研究生招生信息咨询平台 | 网站建设_网站制作_SEO优化推广_百度推广开户_朋友圈网络科技 |