精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

強!Spring Boot 通過服務定位干掉if-else

開發 前端
需要不同的解析器來處理不同的文件類型。例如,XML 文件由 XML 解析器處理,而 JSON 文件則由 JSON 解析器處理。

環境:SpringBoot3.4.2

1. 簡介

相信在項目中都遇到過這樣的需求,根據不同的傳入類型調用同一個接口的不同實現類或服務處理邏輯。

例如,需要不同的解析器來處理不同的文件類型。例如,XML 文件由 XML 解析器處理,而 JSON 文件則由 JSON 解析器處理。

圖片圖片

對于這樣的場景,我們通常會在調用客戶端中使用 if-else 語句。例如,如下代碼示例:

public void processFile(String contentType, String filePath) {
  if ("json".equalsIgnoreCase(contentType)) {
    // ..
  } else if ("xml".equalsIgnoreCase(contentType)) {
    // ...
  } else if ("csv".equalsIgnoreCase(contentType)) {
    // ...
  } else {
    // ...
  }
}

本篇文章將介紹另外一種使用 服務定位器模式(Service Locator Pattern)的方法。其核心思想是面向接口編程,幫助我們消除緊密耦合的實現,并減輕客戶端對具體實現類的依賴。

2.實戰案例

2.1 定義枚舉

在該枚舉類中,我們定義了將要處理的文件類型。

public enum ContentType {
  JSON(TypeConstants.JSON_PARSER), 
  XML(TypeConstants.XML_PARSER), 
  CSV(TypeConstants.CSV_PARSER);


  private final String parserName;
  ContentType(String parserName) {
    this.parserName = parserName;
  }
  @Override
  public String toString() {
    return this.parserName;
  }
  public interface TypeConstants {
    String CSV_PARSER = "csvParser";
    String JSON_PARSER = "jsonParser";
    String XML_PARSER = "xmlParser";
  }
}

2.2 定義解析器接口

針對不同的文件類型,我們只需要定義對應的接口實現即可。

public interface Parser {
  Map<String, Object> parse(Reader r);
}

針對上面定義的3種文件類型,分別實現對應的Parser。

@Component(TypeConstants.CSV_PARSER)
public class CSVParser implements Parser {
  @Override
  public Map<String, Object> parse(Reader r) {
    return Map.of("csv", "csv文件解析成功") ;
  } 
}
@Component(TypeConstants.JSON_PARSER)
public class JSONParser implements Parser {
  @Override
  public Map<String, Object> parse(Reader r) {
    return Map.of("json", "json文件解析成功") ;
  }
}
@Component(TypeConstants.XML_PARSER)
public class XMLParser implements Parser {
  @Override
  public Map<String, Object> parse(Reader r) {
    return Map.of("xml", "xml文件解析成功") ;
  }
}

注意,我們這里的beanName。我們接下來將直接通過beanName自動的查找對應解析器實現。

2.3 定義服務定位器接口

該接口中只有一個方法 getParser,該方法接受一個內容類型(contentType)作為參數,并返回 Parser 接口。

public interface ParserFactory {
  Parser getParser(ContentType contentType);
}

我們將直接通過參數ContentType來獲取對應的Parser具體實現。

2.4 配置ServiceLocatorFactoryBean

該類是我們的重點,我們就是通過它來定義具體的Parser實現。我們配置 ServiceLocatorFactoryBean 來使用 ParserFactory 作為服務定位器接口。ParserFactory 接口不需要具體的實現類。

@Configuration
public class ParserConfig {
  @Bean("parserFactory")
  ServiceLocatorFactoryBean serviceLocatorFactoryBean() {
    ServiceLocatorFactoryBean factoryBean = new ServiceLocatorFactoryBean();
    factoryBean.setServiceLocatorInterface(ParserFactory.class);
    return factoryBean;
  }
}

如上配置后,ServiceLocatorFactoryBean底層會生成ParserFactory的代理類,對應的 InvocationHandler 實現會根據當前調用的方法參數(第一個參數)來獲取對應的beanName。

2.5 測試使用

接下來,在使用 Parser 時就無需關心去引入具體的實現了。通過上面的ServiceLocatorFactoryBean 可以直接根據類型獲取具有相應功能的 Parser 接口。

@Service
public class ParserService {
  private final ParserFactory parserFactory;
  public ParserService(ParserFactory parserFactory) {
    this.parserFactory = parserFactory;
  }
  public Map<String, Object> getData(ContentType contentType) {
    Parser parser = parserFactory.getParser(contentType) ;
    InputStreamReader reader = null ;
    return parser.parse(reader);
  }
}

接下來,我們定義一個Runner進行測試

@Component
public class ParserRunner implements CommandLineRunner {
  private final ParserService parserService ;
  public ParserRunner(ParserService parserService) {
    this.parserService = parserService;
  }
  @Override
  public void run(String... args) throws Exception {
    Map<String, Object> data = this.parserService.getData(ContentType.CSV) ;
    System.err.println(data) ;
    data = this.parserService.getData(ContentType.JSON) ;
    System.err.println(data) ;
    data = this.parserService.getData(ContentType.XML) ;
    System.err.println(data) ;
  }
}

啟動服務后,控制臺輸出結果如下:

圖片

2.6 工作原理

如下圖是ServiceLocator服務定位的工作原理:

圖片

總結:服務定位器模式消除了客戶端對具體實現的依賴。以下是 Martin Fowler 文章中的一段話,它總結了該模式的核心思想:

“服務定位器的基本思想是擁有一個對象,該對象知道如何獲取應用程序可能需要的所有服務。”

責任編輯:武曉燕 來源: Springboot全家桶實戰案例
相關推薦

2020-10-22 09:20:22

SQLNoSQL 數據庫

2024-06-18 18:36:03

2021-01-29 07:45:27

if-else代碼數據

2020-04-09 08:29:50

編程語言事件驅動

2019-04-25 14:25:24

Spring Bootif elseJava

2022-07-11 08:16:55

策略模式if-else

2025-03-12 14:09:56

2023-06-02 07:30:24

If-else結構流程控制

2020-11-09 14:03:51

Spring BootMaven遷移

2021-04-20 08:02:08

業務數據用戶

2013-03-06 10:28:57

ifJava

2022-01-13 10:45:59

if-else代碼Java

2025-03-17 08:10:00

aviatorSpringJVM

2021-04-13 06:39:13

代碼重構code

2021-03-10 07:20:43

if-else靜態代碼

2020-12-15 09:31:58

CTOif-else代碼

2020-05-13 14:15:25

if-else代碼前端

2025-04-24 08:40:00

JavaScript代碼return語句

2021-11-04 08:53:00

if-else代碼Java

2025-09-03 07:39:06

點贊
收藏

51CTO技術棧公眾號

久久福利视频网| 欧美日韩黄视频| 久久久久久一区| 久久国产香蕉视频| 一区二区三区在线| 精品伊人久久97| 免费一区二区三区在线观看| 色呦呦在线播放| 国产亚洲欧洲997久久综合 | 国产亚洲视频在线| 欧美高清精品一区二区| jizz内谢中国亚洲jizz| 亚洲三级视频在线观看| 久久涩涩网站| 99久久精品免费看国产交换| 久久久久国产精品一区三寸 | 美女的胸无遮挡在线观看| 国产精品网站在线播放| 国产日韩一区欧美| 91精品人妻一区二区三区果冻| 亚洲大黄网站| 不卡av电影在线观看| 欧美激情一区二区三区p站| 欧美123区| 欧美午夜精品久久久久久久| 99re6这里有精品热视频| 精彩国产在线| 97久久超碰国产精品| 99re6在线| 国产精品久久久久精| 久久久久欧美精品| 久久久在线视频| 成人涩涩小片视频日本| 欧美亚洲激情| 亚洲小视频在线观看| 人妻体内射精一区二区三区| 免费一级欧美片在线观看网站| 欧美日韩五月天| 日本999视频| 亚洲精品国产精品国产| 亚洲成a人v欧美综合天堂下载 | 中文字幕免费视频| 婷婷成人在线| 亚洲精品一区二区三区香蕉| 国产精品嫩草影视| 国产aa精品| 欧美丰满嫩嫩电影| 日本xxxx黄色| 久久天堂影院| 欧美日韩精品免费| 国内自拍视频网| 嫩草伊人久久精品少妇av杨幂| 黑丝美女久久久| 日韩欧美一区二| 黄毛片在线观看| 精品成人在线视频| av天堂永久资源网| 欧美粗大gay| 日本道色综合久久| 日本新janpanese乱熟| 午夜激情在线播放| 日本韩国视频一区二区| 日韩一级理论片| 成人在线视频观看| 91精品欧美综合在线观看最新| 日本中文字幕影院| 试看120秒一区二区三区| 日韩欧美在线观看一区二区三区| 毛片毛片毛片毛片毛| 99re热精品视频| 日韩av网址在线| 黄免费在线观看| 成人精品久久| 理论片在线不卡免费观看| 青娱乐av在线| 国产精品亚洲综合色区韩国| 国产精品精品一区二区三区午夜版 | 国产精品久久久久久av下载红粉 | 久久99精品国产麻豆婷婷| 国产在线拍偷自揄拍精品| 99精品在线看| 91视视频在线观看入口直接观看www | 女人18毛片毛片毛片毛片区二| 一区二区电影| 91精品国产91久久久久久| 成人公开免费视频| 精品无人区卡一卡二卡三乱码免费卡| 亚洲综合在线做性| 天天摸夜夜添狠狠添婷婷| 国产免费久久精品| 国产爆乳无码一区二区麻豆| 一个人www视频在线免费观看| 欧美在线观看一区| 欧美日韩一区二区区别是什么| 五月天亚洲色图| 久久精品一本久久99精品| 永久免费看片在线播放| 蜜臀久久久久久久| 狠狠爱一区二区三区| 日本在线观看免费| 婷婷夜色潮精品综合在线| 在线看的黄色网址| 欧美久久精品| 免费不卡欧美自拍视频| 国产嫩bbwbbw高潮| 狠狠色狠狠色综合日日91app| 国产亚洲一区二区三区在线播放| 日韩伦理在线观看| 色综合久久综合网欧美综合网| www.桃色.com| 欧美精品一区二区久久| 午夜精品久久久久久久男人的天堂| 波多野结衣视频在线看| 成人精品在线视频观看| 99re99热| 全球最大av网站久久| 亚洲精品理论电影| 青青草免费av| 捆绑紧缚一区二区三区视频| 欧美高清性xxxxhd| 久久av色综合| 在线综合视频播放| 毛片aaaaaa| 蜜桃久久av| 精品一区二区三区日本| 欧美人与性动交α欧美精品济南到 | 国产av人人夜夜澡人人爽| 136福利精品导航| 久久精品小视频| 伊人精品在线视频| 国产午夜精品一区二区三区四区| 国产素人在线观看| 成人免费在线电影网| 欧美成人免费观看| 国产伦一区二区| 中文字幕乱码久久午夜不卡| 能看的毛片网站| 久久av网址| 日本久久久久久久| 国产人成在线视频| 在线观看成人免费视频| 欧美 日韩 成人| 爽爽淫人综合网网站| 欧美在线视频一区二区三区| 美女100%一区| 亚洲欧美中文日韩在线v日本| 久久久久久久黄色片| 91丨九色丨尤物| 色综合久久久久无码专区| 欧美sss在线视频| 91精品国产高清久久久久久| 欧美一级性视频| 午夜亚洲福利老司机| 国产a级黄色片| 美女爽到呻吟久久久久| 日本亚洲自拍| 中文成人激情娱乐网| 久久夜色精品国产欧美乱| 国产精品亚洲欧美在线播放| 一区二区三区在线免费视频| 亚洲熟女一区二区| 亚洲男人影院| 亚洲 国产 日韩 综合一区| 99久久精品一区二区成人| 中日韩美女免费视频网址在线观看 | 国产综合av一区二区三区| 人人草在线视频| 亚洲图片在区色| 一级黄色免费片| 亚洲老司机在线| 国产麻豆xxxvideo实拍| 久久精品天堂| 大地资源第二页在线观看高清版| 日韩精品一区二区三区中文| 97在线免费视频| 岛国最新视频免费在线观看| 制服丝袜中文字幕一区| 精品视频一区二区在线观看| 久久久一区二区| 欧美自拍小视频| 亚洲综合自拍| 另类视频在线观看+1080p| 深夜福利亚洲| 亚州精品天堂中文字幕| wwwww在线观看免费视频| 91精品啪在线观看国产60岁| 国产美女激情视频| 国产精品福利一区| 完美搭档在线观看| 捆绑变态av一区二区三区| 缅甸午夜性猛交xxxx| 欧美日一区二区| 99在线观看视频网站| 日韩成人影音| 欧美高清视频在线| 蜜桃成人在线视频| 日韩精品一区二区在线| 国产男人搡女人免费视频| 亚洲香蕉伊在人在线观| 国产毛片欧美毛片久久久| 成人午夜免费视频| 亚洲国产精品三区| 亚洲影音先锋| 97干在线视频| 91成人观看| 日韩成人av电影在线| 丁香5月婷婷久久| 国产精品一区二区3区| 麻豆免费在线| 欧美精品日韩三级| 国产在线视频网址| 亚洲国产第一页| 99在线精品视频免费观看20| 欧美性生活大片免费观看网址| 69av.com| 中文字幕在线不卡| 中文字幕网站在线观看| av中文一区二区三区| 欧美人与性动交α欧美精品 | 欧美成人精品一区二区综合免费| 免费成人在线观看| 久久久久久久久久久久久国产精品| 国产一区二区中文| 欧美aaa在线观看| 色一区二区三区四区| 欧美国产一二三区| 久久99精品久久久久久欧洲站| 91在线视频一区| 亚洲欧美在线人成swag| 国产精品极品在线| 久久久成人av毛片免费观看| 日本国产欧美一区二区三区| 国产剧情av在线播放| 午夜精品久久久久久久男人的天堂| 亚洲精品白浆| 欧美人与物videos| a级影片在线观看| 久久久精品美女| 老司机午夜在线| xxxxx成人.com| 免费av不卡| 久久视频在线播放| 国产福利视频在线观看| 久久精品一区中文字幕| 黄色成人影院| 麻豆乱码国产一区二区三区| 成年人网站在线| 九九九久久久久久| 欧美24videosex性欧美| 国外成人性视频| 成人欧美magnet| 日韩免费不卡av| 电影一区电影二区| 成人免费网站在线| 日本综合精品一区| 成人自拍偷拍| 婷婷成人影院| 亚洲春色在线视频| 亚洲成av人电影| 老司机午夜免费福利视频| 黄色成人在线网址| 五月丁香综合缴情六月小说| 国产一区二区三区的电影 | 国产亚洲综合色| 美国精品一区二区| 中文字幕佐山爱一区二区免费| 加勒比婷婷色综合久久| 亚洲国产wwwccc36天堂| 欧美日韩一二三四区| 在线精品视频免费播放| 91久久久久国产一区二区| 欧美一区二区视频在线观看2022| 国内老熟妇对白xxxxhd| 亚洲精品电影网| 69视频在线| 欧美国产视频一区二区| 成人美女大片| 91精品国产自产在线老师啪| 第一区第二区在线| 亚洲第一导航| 欧美日韩亚洲一区三区| 91av在线免费播放| 国产精品自拍在线| 亚洲天堂成人av| 国产精品蜜臀av| 久久精品视频9| 欧美手机在线视频| 亚洲精品国产片| 一本色道久久88综合亚洲精品ⅰ | 欧美一区亚洲一区| 日韩国产一二三区| 国产综合精品一区二区三区| 四虎成人av| 欧美 日本 亚洲| 国产久卡久卡久卡久卡视频精品| 欧美成人三级伦在线观看| 国产精品久久免费看| 国产在线视频你懂的| 欧美日韩在线播| 污污网站在线免费观看| 精品精品国产国产自在线| 特黄毛片在线观看| 亚洲综合中文字幕在线观看| 欧美极品在线观看| h无码动漫在线观看| 免费成人在线网站| 亚洲一级中文字幕| 亚洲高清视频中文字幕| 一区二区三区免费观看视频| 精品五月天久久| 色操视频在线| 91久久嫩草影院一区二区| 国产欧美日韩一区二区三区四区| 日韩精品免费一区| 激情av综合网| 欧美xxxx精品| 91久久精品一区二区三| 天堂网av在线播放| 欧美激情xxxx| 精品国产亚洲日本| 亚洲精品乱码久久久久久蜜桃91| 制服诱惑一区二区| 黑人玩弄人妻一区二区三区| 日韩一区在线播放| 在线观看亚洲一区二区| 亚洲欧洲在线看| 超碰一区二区| 麻豆传媒一区| 国产精品视频久久一区| 国产精品九九视频| 亚洲一区二区四区蜜桃| 性猛交xxxx乱大交孕妇印度| 裸体女人亚洲精品一区| 国产一区二区三区精品在线观看| 伊人狠狠色丁香综合尤物| 青青草一区二区三区| 免费a在线观看播放| 欧美性xxxxhd| 男人天堂网在线观看| 日本韩国欧美精品大片卡二| 亚洲动漫在线观看| 欧美黄网站在线观看| 91免费观看在线| 中文字幕超碰在线| 亚洲美女黄色片| av在线日韩| 一区二区三区欧美成人| 捆绑调教美女网站视频一区| 国产免费久久久久| 日韩欧美的一区| 丰满大乳少妇在线观看网站| 国产二区一区| 国产亚洲激情| 少妇无套高潮一二三区| 欧美亚州韩日在线看免费版国语版| 国产在线播放av| 国产精品午夜视频| 91精品一区国产高清在线gif | 中文字字幕在线观看| www.久久久久| 欧美成人一级| 国产人妻777人伦精品hd| 26uuu色噜噜精品一区| 国产黄色免费视频| 久久九九精品99国产精品| 精品国产伦一区二区三区观看说明| 亚洲色欲久久久综合网东京热| 成人av在线看| 69视频免费看| 久久在线免费观看视频| 国产女人18毛片水真多18精品| 久久久久久久午夜| 欧美国产成人在线| 99热精品在线播放| 97久久精品国产| 精品一区二区三区中文字幕老牛| 色婷婷激情视频| 五月激情六月综合| 又爽又大又黄a级毛片在线视频| 18成人免费观看网站下载| 国产农村妇女毛片精品久久莱园子| 久久久视频6r| 欧美videos中文字幕| 亚洲精品一级二级| 99re6这里有精品热视频| 久久伊99综合婷婷久久伊| 一级全黄裸体免费视频| 久久久久久亚洲| 成人情趣视频网站| 五月天丁香社区| 欧美日韩免费观看一区三区| 青草影视电视剧免费播放在线观看| 蜜桃传媒视频麻豆第一区免费观看| 激情综合色综合久久| 91玉足脚交嫩脚丫在线播放| 久久久av一区| 欧美欧美黄在线二区| 中文字幕 欧美 日韩| 欧美亚洲愉拍一区二区| 9999精品成人免费毛片在线看|