精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

91国偷自产中文字幕久久| 亚洲综合激情视频| 欧美男男激情freegay| 免费亚洲婷婷| 日韩在线播放av| 免费看的av网站| 午夜影院在线观看国产主播| 国产精品天天摸av网| 亚洲精品免费网站| 欧美特黄aaaaaa| 99久久久国产精品美女| 欧美精品一区二区三区一线天视频| 91精品国产综合久久久蜜臀图片| 精品在线不卡| 在线黄色av网站| 极品中文字幕一区| 在线观看国产精品91| 黑人巨大猛交丰满少妇| jizz内谢中国亚洲jizz| 亚洲婷婷综合久久一本伊一区| 国产精品免费一区二区三区| 中文字幕日日夜夜| 一区二区三区成人精品| 久久精品久久久久久| 国产aⅴ激情无码久久久无码| 色妞ww精品视频7777| 欧洲国内综合视频| 国产在线精品91| 成人免费网址| 亚洲国产精品成人综合色在线婷婷 | 欧美性受xxxx狂喷水| 美国一区二区三区在线播放 | 日韩大陆毛片av| 国产精品自在自线| 精品三区视频| 精品女同一区二区三区在线播放| 中文字幕日韩精品久久| 成人激情电影在线看| 不卡电影免费在线播放一区| 91色精品视频在线| 中文字幕人妻丝袜乱一区三区| 亚洲二区免费| 欧美激情精品久久久久久| 蜜臀av午夜精品久久| 久久国产精品亚洲人一区二区三区 | 亚洲国产精品人久久电影| 精品国产一区三区| 男人天堂亚洲| 亚洲在线视频网站| 佐佐木明希av| www视频在线免费观看| 中文字幕中文字幕在线一区| 天天综合狠狠精品| 岛国视频免费在线观看| 久久蜜桃av一区二区天堂| 国模精品一区二区三区| 日本黄色不卡视频| 成人激情小说网站| 国产精品区免费视频| 成人午夜福利视频| 成人免费不卡视频| 国产女主播一区二区| 熟妇高潮一区二区三区| av亚洲产国偷v产偷v自拍| 国产精品大全| 天堂网在线资源| 91免费国产在线观看| 欧美一区二区三区成人久久片| 日韩偷拍自拍| 国产日本欧美一区二区| 亚洲一区美女| 97影院秋霞午夜在线观看| 一区二区三区在线高清| 搞av.com| 韩国成人动漫| 欧美日韩一区二区三区高清 | 国产精品小仙女| 97视频中文字幕| 人妻无码中文字幕| 久久一夜天堂av一区二区三区 | 国产伦精品一区二区三区妓女下载 | 日韩欧美国产高清91| 久久婷婷国产91天堂综合精品| 久久欧美肥婆一二区| 欧美男女性生活在线直播观看| 女人喷潮完整视频| 真实国产乱子伦对白在线| 久久porn| 一本色道久久综合亚洲精品小说 | 欧美亚洲成人网| 800av免费在线观看| 日韩激情一二三区| 日本成人动漫在线观看| 日日夜夜精品免费视频| 国产综合视频在线观看| 午夜精品久久久久久久99| 97精品电影院| 9191成人精品久久| 国产又黄又猛的视频| 亚洲精品一区二区三区在线| 日韩精品在线观| 国产精品1区2区3区4区| 国产精品mv在线观看| 5566日本婷婷色中文字幕97| 91麻豆视频在线观看| 不卡av电影在线播放| 亚洲午夜精品一区二区三区| av在线理伦电影| 欧美色图12p| 国产黑丝一区二区| 日本a级不卡| 国内精品免费午夜毛片| 在线播放国产一区| av爱爱亚洲一区| 在线观看成人免费| 456成人影院在线观看| 精品国产乱码久久久久久牛牛| 亚洲精品午夜视频| 亚洲美洲欧洲综合国产一区| 成人免费自拍视频| 黄色片视频在线观看| 亚洲主播在线播放| 自拍偷拍一区二区三区四区| 日本国产精品| 日韩在线激情视频| 日韩 国产 欧美| av在线播放成人| 九一免费在线观看| 手机在线看福利| 日本精品网站| 亚洲精品一区二区在线| 国产精品二区一区二区aⅴ| 精品制服美女丁香| 91免费观看| av片在线观看免费| 在线看国产一区| 中文字幕永久免费| 一区二区三区午夜探花| 国产热re99久久6国产精品| 国产三级在线| 狠狠躁天天躁日日躁欧美| 中文字幕天堂av| 黄色av一区| 成人免费视频网站入口| av网址在线看| 欧美一区二区三区在线电影| 久久爱一区二区| 久久99国产精品麻豆| 亚洲欧洲在线一区| 欧美性片在线观看| 深夜精品寂寞黄网站在线观看| 欧美性猛交xxxx乱大交hd| 久久丝袜美腿综合| 黄色片一级视频| 国产欧美一区| 国产精品久久久久久久久久久新郎 | 性欧美丰满熟妇xxxx性久久久| 亚洲91中文字幕无线码三区| 成人国产精品av| 在线观看麻豆| 欧美精选一区二区| 97在线观看免费高| 国产精一区二区三区| 五月天激情图片| 国产精品剧情一区二区在线观看 | 这里只有精品视频| 在线观看国产精品视频| 国产精品国产三级国产aⅴ无密码| 国产一区二区在线免费播放| 色无极亚洲影院| 91在线视频成人| 三区精品视频观看| 羞羞视频在线免费国产| 精品久久五月天| 久久黄色精品视频| 中文字幕 久热精品 视频在线| 97超级碰碰| 国产精品久久久久久久免费| 自拍偷拍国产精品| 催眠调教后宫乱淫校园| 久久高清免费观看| 在线看成人av电影| 国产精品视屏| 亚洲三级小视频| 久草精品在线播放| 妖精一区二区三区精品视频 | 欧美亚洲综合视频| 插插插亚洲综合网| 欧美一区二区三区成人片在线| 狠狠久久亚洲欧美专区| 免费h精品视频在线播放| 呦呦在线视频| 亚洲精品国产电影| 这里只有精品国产| 亚洲一区二区三区爽爽爽爽爽| xxx欧美精品| 中文字幕手机在线视频| 亚洲激情图片qvod| 麻豆精品免费视频| 国产麻豆视频一区| 久久99导航| 波多野结衣高清在线| 国产网站一区二区三区| 亚洲AV无码久久精品国产一区| 中文久久精品| 亚洲AV无码成人精品一区| 欧美久久精品| 91久久久久久久| 国产老熟女伦老熟妇露脸| 伊人青青综合网| 日本精品一区二区三区视频| 欧美黄色一级| 国产精品毛片a∨一区二区三区|国| 911国产在线| 奇米精品一区二区三区在线观看 | 在线亚洲观看| 国产精品三级在线| 国产性xxxx高清| 国产肉丝袜一区二区| 国产亚洲自拍偷拍| 天天爽夜夜爽夜夜爽| 欧美日韩一区二区三区四区五区| 欧美激情论坛| 成人全视频免费观看在线看| 午夜精品视频网站| 超碰在线网址| 日韩中文字幕精品视频| 三级国产在线观看| 亚洲午夜一级| 日本不卡一区| 欧洲亚洲视频| 国产一区二区在线网站| 99久久久国产| 国产精品视频精品视频| 中文字幕21页在线看| 97人人做人人爱| 牛牛电影国产一区二区| 欧美麻豆久久久久久中文| 中文字幕一区二区人妻电影丶| 久久91精品久久久久久秒播| 成人黄色一区二区| 久久成人一区| 青青青在线播放| 国产精品久久777777毛茸茸| 97精品国产97久久久久久| 在线观看视频中文字幕| 在线看日韩精品电影| 国产suv精品一区二区33| 欧美日韩中文字幕日韩欧美| 国产成人无码一区二区三区在线| 亚洲午夜免费视频| 自拍日韩亚洲一区在线| 欧洲午夜精品| 国产主播喷水一区二区| 亚洲人成777| 91视频88av| 日韩精品一区二区三区中文字幕| 国产在线拍揄自揄视频不卡99| 亚洲欧美一级| 91国产在线播放| 91成人入口| 亚洲女人天堂色在线7777| 国产极品美女在线| 日本在线不卡一区| 久久综合图片| 精品成在人线av无码免费看| 欧美暴力喷水在线| 精品视频在线观看一区二区| 欧美激情日韩| 中文一区二区在线观看 | 精品亚洲精品| 国产一区再线| 中文字幕av一区二区三区人| 日韩av电影免费在线观看| 久久综合av| 欧美 日韩 国产精品| 亚洲三级网站| 蜜臀视频一区二区三区| 你懂的视频在线免费| 亚洲国产精品字幕| 男人天堂资源在线| 日韩最新中文字幕电影免费看| caopeng在线| 51ⅴ精品国产91久久久久久| 在线成人视屏| 亚洲韩国一区二区三区| 亚洲欧美一区二区三区四区五区| 亚洲成av人片www| 日韩黄色一级视频| 91麻豆精品91久久久久久清纯| 亚洲高清在线观看视频| 亚洲欧美国产日韩天堂区| 免费大片黄在线观看视频网站| 狠狠色香婷婷久久亚洲精品| 视频免费在线观看| 国产亚洲精品超碰| 黄色a级片在线观看| 精品日本高清在线播放| 一二三四区在线| 亚洲第一页自拍| 成年午夜在线| 欧美激情中文字幕乱码免费| 成人毛片在线精品国产| 欧美精彩视频一区二区三区| 精品人妻中文无码av在线| 亚洲精品乱码久久久久久| 国产一级淫片a视频免费观看| 欧美一区二区在线免费观看| 欧美偷拍视频| 久久99久久亚洲国产| 性感美女一区二区在线观看| 成人欧美视频在线| 日韩一区欧美| 日韩欧美精品在线观看视频| 欧美一区 二区| 久久久久久久久久婷婷| 性感美女一区二区在线观看| 国产精品yjizz| 亚洲情侣在线| 国产精品拍拍拍| 91色九色蝌蚪| 国产无遮挡免费视频| 7777女厕盗摄久久久| 中日韩av在线播放| 99精品国产99久久久久久白柏 | 亚洲男人第一天堂| 日韩一区二区三区xxxx| 成人软件在线观看| 久久久久久久久久久久久久一区| 国产字幕视频一区二区| 在线观看日本www| 黄色片在线看| 精品无码久久久久久国产| 羞羞视频在线免费国产| 成人中心免费视频| 成人羞羞网站入口| 三级在线免费看| 久久精品夜夜夜夜久久| 日韩精品在线免费视频| 一区二区三区高清视频在线观看| а 天堂 在线| 自拍偷拍国产精品| 一级黄色片视频| 色偷偷偷综合中文字幕;dd| 97人人做人人爽香蕉精品| 亚洲天堂一区二区三区| 国产www免费观看| 久久精品视频导航| 二区三区精品| 国产av第一区| 国产精品伊人色| 欧美成人手机视频| 欧美成人艳星乳罩| 亚洲精品1区2区3区| 1区2区3区精品视频| 国产乱码久久久| www亚洲欧美| 高清一区二区中文字幕| 中文字幕色一区二区| 国产九九视频一区二区三区| 欧美日韩精品在线观看视频 | 精品成人a区在线观看| 人人超在线公开视频| 成人午夜影院在线观看| 亚洲福利电影| 中国黄色a级片| 色老头久久综合| 在线免费观看黄| www.亚洲精品| 性欧美疯狂猛交69hd| 日韩精品中文字幕在线不卡尤物| 黑人极品ⅴideos精品欧美棵| 国产精品国产一区二区| 亚洲欧美网站| 国产一区二区三区四区hd| 日韩免费高清| 337p日本欧洲亚洲大胆张筱雨 | 国产福利视频一区二区三区| 久久精品女人毛片国产| 日韩国产在线播放| 成人国产一区二区三区精品麻豆| 51精品国自产在线| 在线视频91p| 99re在线视频观看| 国产精品嫩草99av在线| 貂蝉被到爽流白浆在线观看| 欧美一级二级在线观看| 亚洲美女尤物影院| 亚欧洲精品在线视频免费观看| 国产剧情一区二区| 波多野结衣视频网站| 最近2019好看的中文字幕免费| 午夜视频www| 国产婷婷色一区二区三区在线| 日韩肉感妇bbwbbwbbw| 亚洲人精品午夜| 天天在线女人的天堂视频| 国产视频福利一区| 一区二区动漫| 男人亚洲天堂网|