成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術(shù)文章
文章詳情頁

Java SPI機制原理及代碼實例

瀏覽:73日期:2022-08-31 09:56:45

SPI的全名為:Service Provider Interface,大多數(shù)開發(fā)人員可能不熟悉,因為這個是針對廠商或者插件的。在java.util.ServiceLoader的文檔里有比較詳細(xì)的介紹。

簡單的總結(jié)下 Java SPI 機制的思想。我們系統(tǒng)里抽象的各個模塊,往往有很多不同的實現(xiàn)方案,比如日志模塊的方案,xml解析模塊、jdbc模塊的方案等。面向的對象的設(shè)計里,我們一般推薦模塊之間基于接口編程,模塊之間不對實現(xiàn)類進行硬編碼。

一旦代碼里涉及具體的實現(xiàn)類,就違反了可拔插的原則,如果需要替換一種實現(xiàn),就需要修改代碼。為了實現(xiàn)在模塊裝配的時候能不在程序里動態(tài)指明,這就需要一種服務(wù)發(fā)現(xiàn)機制。

Java SPI 就是提供這樣的一個機制:為某個接口尋找服務(wù)實現(xiàn)的機制。有點類似IOC的思想,就是將裝配的控制權(quán)移到程序之外,在模塊化設(shè)計中這個機制尤其重要。

Java SPI 的具體約定為:當(dāng)服務(wù)的提供者,提供了服務(wù)接口的一種實現(xiàn)之后,在jar包的META-INF/services/目錄里同時創(chuàng)建一個以服務(wù)接口命名的文件。該文件里就是實現(xiàn)該服務(wù)接口的具體實現(xiàn)類。

而當(dāng)外部程序裝配這個模塊的時候,就能通過該jar包META-INF/services/里的配置文件找到具體的實現(xiàn)類名,并裝載實例化,完成模塊的注入。

基于這樣一個約定就能很好的找到服務(wù)接口的實現(xiàn)類,而不需要再代碼里制定。jdk提供服務(wù)實現(xiàn)查找的一個工具類:java.util.ServiceLoader。

1.common-logging

apache最早提供的日志的門面接口。只有接口,沒有實現(xiàn)。具體方案由各提供商實現(xiàn), 發(fā)現(xiàn)日志提供商是通過掃描 META-INF/services/org.apache.commons.logging.LogFactory配置文件,通過讀取該文件的內(nèi)容找到日志提工商實現(xiàn)類。

只要我們的日志實現(xiàn)里包含了這個文件,并在文件里制定 LogFactory工廠接口的實現(xiàn)類即可。關(guān)注Java技術(shù)棧微信公眾號,在后臺回復(fù)關(guān)鍵字:Java,可以獲取更多棧長整理的Java技術(shù)干貨。

2.jdbc

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

一個內(nèi)容管理系統(tǒng)有一個搜索模塊。是基于接口編程的。搜索的實現(xiàn)可能是基于文件系統(tǒng)的搜索,也可能是基于數(shù)據(jù)庫的搜索

接口定義如下:

package my.xyz.spi;import java.util.List;public interface Search { public List serch(String keyword);}

A公司采用文件系統(tǒng)搜索的方式實現(xiàn)了 Search接口,B公司采用了數(shù)據(jù)庫系統(tǒng)的方式實現(xiàn)了Search接口。

A公司實現(xiàn)的類:com.A.spi.impl.FileSearch

B公司實現(xiàn)的類:com.B.spi.impl.DatabaseSearch

那么A公司發(fā)布 實現(xiàn)jar包時,則要在jar包中META-INF/services/my.xyz.spi.Search文件中寫下如下內(nèi)容:

com.A.spi.impl.FileSearch

那么B公司發(fā)布 實現(xiàn)jar包時,則要在jar包中META-INF/services/my.xyz.spi.Search文件中寫下如下內(nèi)容:

com.B.spi.impl.DatabaseSearch

下面是 SPI 測試代碼:

package com.xyz.factory;import java.util.Iterator;import java.util.ServiceLoader;import my.xyz.spi.Search;public class SearchFactory { private SearchFactory() { } public static Search newSearch() { Search search = null; ServiceLoader<Search> serviceLoader = ServiceLoader.load(Search.class); Iterator<Search> searchs = serviceLoader.iterator(); if (searchs.hasNext()) { search = searchs.next(); } return search; }}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Java
相關(guān)文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
在线欧美一区二区| 欧美日本免费一区二区三区| 色网站国产精品| 亚洲美女在线一区| 激情91久久| 国产精品拍天天在线| 国产剧情一区二区| 欧美视频一二三区| 免费成人在线网站| 久久人人97超碰国产公开结果| 亚洲一区二区精品久久av| 中文一区在线| 亚洲欧美视频在线观看视频| 韩日午夜在线资源一区二区| 欧美国产日本韩| 欧美伊人久久| 久久综合国产精品| 成人av集中营| 久久久精品综合| 91论坛在线播放| 日本一区二区三级电影在线观看| 成人午夜短视频| 欧美精品一区二区三区四区| 99国内精品久久| 久久精品人人做人人爽97| 欧美一区免费| 91久久久久| 亚洲国产欧美在线| 久久午夜精品一区二区| 三级欧美韩日大片在线看| 香蕉亚洲视频| 日日摸夜夜添夜夜添国产精品| 色琪琪一区二区三区亚洲区| 久草热8精品视频在线观看| 欧美电影在线免费观看| 国产乱子轮精品视频| 欧美久久久久久久久| 成人性色生活片免费看爆迷你毛片| 精品国产一区二区三区久久影院| 欧美在线免费| 亚洲视频免费观看| 蜜桃伊人久久| 韩国av一区二区| 精品国产青草久久久久福利| 国产在线视频一区二区三区| 日韩女优制服丝袜电影| 色综合久久综合网97色综合| 亚洲少妇30p| 久久久久久网| 国产河南妇女毛片精品久久久| 91精品国产一区二区三区蜜臀| 国产一区二区不卡| 久久综合久久99| 一区二区三区免费看| 轻轻草成人在线| 91精品国产综合久久精品图片 | 国产乱人伦偷精品视频不卡| 欧美电影免费提供在线观看| 欧美精品福利| 午夜视频一区在线观看| 91精品国产一区二区三区蜜臀| 99久久精品久久久久久清纯| 亚洲天堂福利av| 91福利社在线观看| gogo大胆日本视频一区| 亚洲另类一区二区| 欧美日本在线看| 欧美日本一区二区高清播放视频| 亚洲大型综合色站| 日韩欧美的一区| 伊人蜜桃色噜噜激情综合| 日本 国产 欧美色综合| wwwwww.欧美系列| 国产精品视频免费一区| 国产69精品一区二区亚洲孕妇| 亚洲色图欧美在线| 欧美日韩亚洲综合在线 欧美亚洲特黄一级 | 一区二区三区免费网站| 色妞www精品视频| 波多野洁衣一区| 亚洲一区在线电影| 日韩一级欧美一级| 一本色道久久综合亚洲精品婷婷| 韩国av一区二区| 亚洲男人电影天堂| 这里只有精品99re| 亚洲黑丝在线| 日本aⅴ亚洲精品中文乱码| 亚洲精品一区二区三区精华液| 国产精品区免费视频| 国内精品视频666| 亚洲欧美日韩国产中文在线| 欧美一区二区三区四区视频| 国产人成精品一区二区三| 国产成人免费av在线| 亚洲精品视频一区| 欧美电影免费观看高清完整版在线| 中文一区二区| 成人国产电影网| 亚洲电影在线免费观看| 欧美不卡一区二区| 色婷婷久久一区二区三区麻豆| 欧美日韩一区在线观看视频| 精品一区二区三区视频在线观看| 国产精品的网站| 9191国产精品| 亚洲一区二区三区在线观看视频| 99精品桃花视频在线观看| 天使萌一区二区三区免费观看| 337p粉嫩大胆色噜噜噜噜亚洲| 久久久久久一区二区| 欧美日韩成人一区二区三区| 国产精品一区二区果冻传媒| 亚洲h精品动漫在线观看| 国产精品天干天干在观线| 7777精品伊人久久久大香线蕉完整版 | 中文字幕精品在线不卡| 欧美日韩国产综合视频在线观看| 亚洲精品社区| 欧美.日韩.国产.一区.二区| 国内精品视频一区二区三区八戒| 亚洲高清一区二区三区| 国产精品久久久久久久久免费相片| 91精品黄色片免费大全| 久久亚洲欧美| 国内揄拍国内精品久久| 成人一级片在线观看| 看电视剧不卡顿的网站| 亚洲激情校园春色| 国产日韩欧美一区二区三区综合| 欧美一区二区三区系列电影| 一区二区三区视频在线播放| 亚洲欧美影院| 99精品在线免费| 国产aⅴ综合色| 国模套图日韩精品一区二区 | 亚洲已满18点击进入久久| 国产日产欧美一区二区视频| 欧美精品aⅴ在线视频| 久久综合婷婷| 亚洲免费影院| 亚洲高清视频一区二区| 欧美精品国产| 色综合网色综合| 99久久综合色| 波多野结衣中文字幕一区二区三区 | 亚洲高清免费观看高清完整版在线观看| 久久日韩精品一区二区五区| 777午夜精品免费视频| 欧美亚一区二区| 久久久久欧美精品| 在线亚洲自拍| 亚洲久久一区| 亚洲国产日韩综合一区| 国产一区二区三区无遮挡| 91无套直看片红桃| 99久久婷婷国产精品综合| 99精品视频中文字幕| av在线一区二区三区| 成人av网站在线| 成人动漫一区二区| 成人h动漫精品一区二区| 懂色av中文字幕一区二区三区| 国产精品资源在线观看| 韩国欧美国产一区| 国产在线乱码一区二区三区| 国模娜娜一区二区三区| 国产一区二区免费在线| 国产精品99久久不卡二区| 国产不卡免费视频| 不卡的看片网站| 97国产一区二区| 欧美精选一区| 国内激情久久| 亚洲私人影院| 国产欧美日韩伦理| 久久精品亚洲| 色综合久久久久| 精品视频999| 久久久久国产精品一区二区| 91国偷自产一区二区三区观看 | 国产精品高潮呻吟久久| 中文字幕亚洲一区二区va在线| 中文字幕欧美一区| 一区二区成人在线| 日韩电影免费在线| 久久69国产一区二区蜜臀| 国产91精品欧美| 97se亚洲国产综合自在线不卡| 午夜国产精品视频| 伊人蜜桃色噜噜激情综合| 亚洲一区二区三区精品动漫| 色天天综合久久久久综合片| 欧美曰成人黄网| 日韩视频一区二区三区| 久久久久久久免费视频了| 国产精品久久久久久久久晋中| 一级女性全黄久久生活片免费| 日韩和欧美的一区| 国产中文字幕精品|