国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

字節面試也會問SPI機制?

開發 前端
本次講解的兩種方式均是基于SPI機制,可見是多么受開發追捧。當然,還有很多種實現方式,我個人覺得最主要的還是能夠在自己的掌控范圍內去使用,畢竟有問題可以通過自己的學習理解去解決。

?1.前言

Java SPI 機制,主要是類加載器反雙親委派的實現(第三方包不在指定jdk路徑,一般類加載器無法加載,需要特殊的ContextClassLoader加載以便使用)。本次將對 SPI機制進行詳解,并結合案例介紹其在實際場景中具體使用。

提示:以下是本篇文章正文內容,案例僅供對比參考

2.什么是SPI機制?

  • SPI(全稱:Service Provider Interface),是jdk內置的一種服務提供發現接口機制,旨在由第三方服務實現或擴展為組件,方便開發人員快速集成指定擴展組件滿足指定的需求。這對于應用或平臺擴展來說,無疑是一種成本較低、動態靈活的方案。
  • SPI機制調度過程(業務調用方可根據加載的擴展實現類實現功能)
  • 調用流程

圖片

3.實現方式及使用場景

鑒于目前實際項目涉及范圍,總結出的常見應用場景。

3.1 接口權限定文件名方式

即在resource文件下創建META/services/目錄,并在此目錄下新建文件,文件名稱為接口類權限定文件名,如 com.lgy.spidemo.serviceway.SpiService。(不好理解就是接口類的package地址 + 接口類名)

使用場景一:

  • 場景描述:不同部門類型的員工需要從不同的考勤應用獲取出勤信息,如職能部門僅拉取釘釘考勤,業務部門需要拉取釘釘考勤的基礎上再結合自研考勤模塊數據匯總出勤結果。
  • 實現方式:抽象通用拉取考勤接口,定義不同部門人員考勤統計實現類。
  • 直接上代碼:
  • 通用接口:
package com.lgy.spidemo.serviceway;

/**
* @description: 考勤接口
**/
public interface AttendanceService {
void pullAttendanceInfos();
}
  • 職能部門考勤實現類;
/**
* @description: 職能部門考勤實現
**/
public class FunctionAttendanceServiceImpl implements AttendanceService {
@Override
public void pullAttendanceInfos() {
System.out.println(" FunctionAttendanceService implements ...");
// 邏輯忽略
}
}
  • 銷售部門考勤實現;
/**
* @description: 銷售部門考勤實現
**/
public class SaleAttendanceServiceImpl implements AttendanceService {
@Override
public void pullAttendanceInfos() {
System.out.println(" SaleAttendanceService implements ...");
// 邏輯忽略
}
}
  • 測試類;
 /**
* 1、項目的\src\main\resources\下創建\META-INF\services目錄
* 2、META-INF\services的目錄下再增加一個配置文件,這個文件必須以接口的全限定類名保持一致 (com.lgy.spidemo.service.SpiService)
* 3、在配置文件中寫入具體實現類的全限定類名,如有多個便換行寫入 com.lgy.spidemo.service.impl.SaleAttendanceServiceImpl
com.lgy.spidemo.service.impl.FunctionAttendanceServiceImpl
**/
public class AttendanceServiceTest {
public static void main(String[] args) {
ServiceLoader<AttendanceService> services =
ServiceLoader.load(AttendanceService.class);
// 省略判斷人員部門類型邏輯
// 測試輸出結果,展示實現接口已加載
for (AttendanceService service : services) {
service.pullAttendanceInfos();
}
}
}
  • 測試結果如下;
// 兩個實現類均被加載成功,在實際使用時,可根據需要去調用不同的實現。
FunctionAttendanceService implements ...
SaleAttendanceService implements ....

實現類不要標注任何注解,不然Spring在初始化過程中掃描并加載,無法測試。

結合場景一分析:

  • 此場景可以通過自定義實現類的方式滿足業務需求(不同部門的考勤規則),有助于業務實現快速迭代,同時也提升了服務架構的可拓展性。
  • 考慮公司組織架構比較復雜,部門職責分的比較細,后續擴展幾率比較大,比如職能部門行政類和運營類標準細分,很可能會增加除了考勤之外的各種考核指標等,借鑒此方案可能簡單實現并比較方便集成,使得業務間減少依賴,實現解耦的設計模式,因此個人是比較偏向用此方案。
  • 其它應用:如項目中常用的日志也是采用SPI機制,常見的common-logging的LogFatory就是標準SPI接口,有興趣的可以自行研究。

3.2 spring.factories方式

  • 和上面一樣,需要在resource文件下創建META/services/目錄,并在此目錄下新建文件,區別在于文件名為spring.factories。

使用場景二

  • 場景描述:針對于不同的開發端使用習慣展示不同的接口文檔,比如APP端習慣于Swagger,JAVA端喜歡dateway風格,就在不同實例展示不同接口文檔。此場景是我臆想出來。
  • 實現方式:構建兩種版本的jar包,比如 1.0.0-swagger 、2.0.0-dataway,再對應的包內配置spring.factories內的config配置類。

代碼如下:

package com.lgy.spidemo.factoriesway;

import org.springframework.boot.autoconfigure.AutoConfigurationImportEvent;
import org.springframework.boot.autoconfigure.AutoConfigurationImportListener;

/**
* @description: 自動配置swagger
**/
public class SwaggetAutoConfiguration {
public SwaggetAutoConfiguration() {
System.out.println(" SwaggetAutoConfiguration init ...");
}
// 配置內容省略
}

/**
* @description: 自動配置dataway
**/
public class DataWayAutoConfiguration {
public DataWayAutoConfiguration() {
System.out.println(" DataWayAutoConfiguration init ...");
}
// 配置內容省略
}

/**
* resource/META-INFO/spring.factories 文件內容 *
* org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.lgy.spidemo.factoriesway.SwaggetAutoConfiguration
* 輸出結果:SwaggetAutoConfiguration init ...
**/
  • 根據spring.factories內配置的類,在springboot啟動初始化過程中會自動加載對應的配置,實現所需的接口文檔。

結合場景二分析:

  • spring.factories實現機制與上述方式一致,只是實現方式不同,本質目的是通過抽象化類的方式,實現解耦,最終便于擴展
  • 其它使用場景:如spring-boot-autoconfigure-x.x.x.RELEASE.jar,就是通過此方式完成初始化加載。

4.總結

本次講解的兩種方式均是基于SPI機制,可見是多么受開發追捧。當然,還有很多種實現方式,我個人覺得最主要的還是能夠在自己的掌控范圍內去使用,畢竟有問題可以通過自己的學習理解去解決。

最后說一句,沒有更好的技術知識,只有更適合的技術應用,結合實際,檢出真理。

責任編輯:武曉燕 來源: Java技術指北
相關推薦

2020-12-14 11:35:22

SPI Java機制

2021-05-30 07:54:24

SPI機制場景

2024-10-29 08:34:55

SPI機制接口

2025-08-05 01:55:00

JavaSPI機制

2024-05-13 17:40:09

JavaLocking

2021-08-12 06:52:02

谷歌面試ArrayList

2020-11-05 13:12:47

紅黑樹

2011-11-30 14:35:19

JavaSPI

2024-06-14 08:34:36

2021-03-16 08:26:49

RedisRDBAOF

2021-04-21 09:28:17

字節面試官SetTimeout

2025-05-08 03:25:00

DubboSPI機制

2021-12-13 11:12:41

Spring事務失效

2025-04-10 07:00:00

2021-02-07 21:16:04

字節跳動面試字符串

2025-02-03 11:27:59

2022-05-06 08:26:32

JavaSPI機制

2023-12-11 07:21:12

SPI機制插件

2021-07-21 09:15:27

MySQL數據庫面試

2025-03-04 09:02:25

JavaSPI機制
點贊
收藏

51CTO技術棧公眾號

亚洲国产精品人人爽夜夜爽| 国产精品亚洲第一| 久久久久久美女| 99热99re6国产在线播放| 制服丝袜亚洲网站| 牛牛电影国产一区二区| 国产日韩欧美a| 日韩jizzz| 黄视频免费在线看| 日韩精品一区二区三区四区| 黄色网址免费在线观看| 欧美影院一区二区三区| wwwcom羞羞网站| 亚洲成人福利片| 午夜亚洲成人| 欧美性高清videossexo| 日本综合字幕| 欧美综合国产精品久久丁香| 日韩成人综合| 99视频日韩| 久久国产精品99久久人人澡| 中文字幕一区二区三区最新| 国产老女人精品毛片久久| 男人添女人下面高潮视频| 亚洲丝袜制服诱惑| eeuss影院www在线观看| 精品国产99国产精品| 日本在线成人| 热re99久久精品国99热蜜月| 成人av午夜电影| 国内精品卡一卡二卡三新区| 精品国产露脸精彩对白| jizz内谢中国亚洲jizz| 国产成人精品久久| 国产一区二区三区美女| 亚洲а∨精品天堂在线| 美女精品视频一区| 久久午夜精品一区二区| 国产特级嫩嫩嫩bbb| 亚洲精品一区二区三区精华液 | 国产黄色一区| 成人在线视频电影| 亚洲已满18点击进入在线看片| 92福利视频午夜1000合集在线观看| 亚洲在线免费看| 精品视频第一区| 欧妇女乱妇女乱视频| 欧美电影在线观看免费| 成人线上视频| 都市激情亚洲| 激情六月综合| 日本成人在线一区| 久久久久亚洲蜜桃| 午夜精品福利一区二区蜜股av| 欧美午夜精品理论片a级按摩| 奶水喷射视频一区| 国产在线一区二区综合免费视频| 波波电影院一区二区三区| 一区二区久久久久久| 亚洲成人网av| 欧美精品福利视频| 热re99久久精品国产99热| 欧美黑人经典片免费观看| 日韩精品123| 日本综合视频| 91精品国产乱码久久久久久| 久久精品国产久精国产爱| 自拍av一区二区三区| 日韩电影中文字幕| 亚洲综合中文字幕在线观看| 欧美午夜性视频| 欧美女子与性| 国产理论电影在线观看| 欧美精品总汇| 一区二区亚洲精品| 国产清纯在线一区二区www| 岛国精品一区| 在线国产精品一区| 亚洲丝袜精品丝袜在线| 精品国产免费一区二区三区四区| 26uuu国产精品视频| 免费观看国产视频在线| 国产高清自拍视频在线观看| 精品按摩偷拍| 成人综合激情网| 精品国产乱码久久久久久久| 国产精品网站入口| 激情视频免费网站| 欧美国产欧美亚洲国产日韩mv天天看完整 | av在线app| 亚洲国产高清在线观看| 狠狠色丁香久久婷婷综| 欧美日韩中文字幕精品| 国产一区欧美二区三区| 毛片毛片毛片毛片| 九一精品国产| 亚洲女同一区二区| 91天堂在线视频| 日韩精品视频无播放器在线看| 四虎5151久久欧美毛片| 亚洲精品中文在线| 国产999精品视频| 91午夜在线| 欧美在线免费一级片| 精品国产乱码久久久久久天美| 国产精品video| 蜜桃成人在线视频| 国产精品普通话对白| 亚洲精品在线电影| www亚洲国产| 成人综合日日夜夜| 亚洲美女视频在线观看| 国产精品啪视频| 欧洲天堂在线观看| 日韩国产欧美在线观看| 国产一区二区免费| www.欧美日本| 日本一区二区在线看| 日韩一区二区三区在线观看| 精品视频一区在线| 123成人网| 亚洲v中文字幕| 亚洲国产精品久久久久婷婷老年| 三级成人黄色影院| 日韩精品视频无播放器在线看| 成午夜精品一区二区三区软件| 樱花草国产18久久久久| 成人两性免费视频| 激情视频在线观看| 91丨porny丨蝌蚪视频| 国产精品户外野外| 欧美人与牲禽动交com| 加勒比海盗1在线观看免费国语版| 欧美最近摘花xxxx摘花| 大乳在线免费观看| 成人做爰69片免费看网站| 68精品国产免费久久久久久婷婷 | 日韩欧美国产午夜精品| 日韩一区视频在线| 欧美网站免费观看| 五月激情六月综合| 美女诱惑一区二区| 在线观看不卡av| 性色av一区二区三区在线观看| 欧美日韩亚洲免费| 中文字幕欧美一| 日本一区高清在线视频| 精品九九在线| 九九久久久久99精品| 国产美女高潮在线观看| 亚洲女爱视频在线| 国产成人精品视频免费看| 国产999精品久久久久久绿帽| 日本一区二区三区精品视频| 国产精品jizz在线观看美国| 操一操视频一区| 免费日韩av片| 欧美xxxx吸乳| 久久亚区不卡日本| 日韩日韩日韩日韩| 欧美视频一区二区三区四区| 巨大荫蒂视频欧美大片| 日韩欧美国产精品| 欧美在线va视频| 欧美一级成年大片在线观看| 99九九热只有国产精品| 国产精品一区二区三区精品| 久久av中文字幕片| 欧美中日韩一区二区三区| 一区二区三区四区五区精品视频 | 精品亚洲一区二区三区四区五区| 在线观看黄色av| 亚洲第一区在线| 日韩欧美中文字幕在线视频| 日韩av电影中文字幕| 亚洲黄色精品| 日韩精品福利片午夜免费观看| 91蝌蚪porny| 在线观看视频你懂的| 欧美精品一区二区三区一线天视频| 成人一级视频| 国产精品尤物福利片在线观看| 亚洲综合日韩| 亚洲一级片网站| 日韩亚洲欧美综合| 国产区一区二| 都市激情久久久久久久久久久| 国产伦精品一区二区三区免费| 怡红院av亚洲一区二区三区h| 午夜视频一区二区| 78精品国产综合久久香蕉| www国产亚洲精品| 国产精品电影院| 成人1区2区| 亚洲人一区二区| 欧美日本国产视频| 日韩a一区二区| 久久这里只精品| 亚洲综合国产| 濑亚美莉vs黑人在线观看|