最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

在SpringBoot中實現(xiàn)適配器模式的兩種方式

 更新時間:2024年03月14日 10:40:22   作者:魚魚大頭魚  
這篇文章主要介紹了在SpringBoot中實現(xiàn)適配器模式的兩種方式,通過實現(xiàn)類定義類型字段實現(xiàn)和以動態(tài)service名稱的方式實現(xiàn),并且通過代碼示例講解的非常詳細(xì),具有一定的參考價值,需要的朋友可以參考下

1. 場景

當(dāng)我們后臺有兩個數(shù)據(jù)庫,分別為mysql和oracle,根據(jù)前端參數(shù)中的數(shù)據(jù)庫類型字段,去查詢對應(yīng)sql語句

2. 方式1,通過實現(xiàn)類定義類型字段實現(xiàn)

2.1 創(chuàng)建接口

public interface DbService {

    /**
     * 獲取數(shù)據(jù)庫類型
     * @return
     */
    String getDbType();

    /**
     * 查詢數(shù)據(jù)庫sql
     * @return
     */
    String getDbSql();
}

2.2 創(chuàng)建mysql實現(xiàn)類

@Service
public class MysqlDbService implements DbService{

    @Override
    public String getDbType() {
        return "mysql";
    }

    @Override
    public String getDbSql() {
        return "獲取mysql的SQL";
    }
}

2.3 創(chuàng)建oracle實現(xiàn)類

@Service
public class OracleSDbService implements DbService{

    @Override
    public String getDbType() {
        return "oracle";
    }

    @Override
    public String getDbSql() {
        return "獲取oracle的SQL";
    }
}

2.4 創(chuàng)建接口,在接口中注入service集合,根據(jù)每個實現(xiàn)類中定義的dbType進(jìn)行匹配后進(jìn)行調(diào)用

@RestController
@RequestMapping("/test")
public class TestController {

    @Resource
    private List<DbService> dbServiceList;

    @GetMapping("/getDbSql1")
    public String getDbSql(@RequestParam String dbtype){
        DbService dbService = dbServiceList.stream().filter(item -> dbtype.equals(item.getDbType())).findFirst().get();
        return dbService.getDbSql();
    }

}

2.5 測試,瀏覽器輸入

在這里插入圖片描述

3. 方式2,以動態(tài)service名稱的方式實現(xiàn)

3.1 創(chuàng)建接口

public interface DbService {

    /**
     * 獲取數(shù)據(jù)庫類型
     * @return
     */
    String getDbType();

    /**
     * 查詢數(shù)據(jù)庫sql
     * @return
     */
    String getDbSql();
}

3.2 創(chuàng)建創(chuàng)建mysql實現(xiàn)類,定義實現(xiàn)類名稱為mysqlDbService

@Service(value = "mysqlDbService")
public class MysqlDbService implements DbService{

    @Override
    public String getDbType() {
        return "mysql";
    }

    @Override
    public String getDbSql() {
        return "獲取mysql的SQL";
    }
}

3.3 創(chuàng)建創(chuàng)建oracle實現(xiàn)類,定義實現(xiàn)類名稱為oracleDbService

@Service(value = "oracleDbService")
public class OracleSDbService implements DbService{

    @Override
    public String getDbType() {
        return "oracle";
    }

    @Override
    public String getDbSql() {
        return "獲取oracle的SQL";
    }
}

3.4 引入ApplicationContext,獲取service方法名

@Component("applicationContextHelper")
public class ApplicationContextHelper implements ApplicationContextAware {

    private static ApplicationContext applicationContext;

    public static <T> T popBean(String name, Class<T> clazz) {
        if (applicationContext == null) {
            return null;
        }
        return applicationContext.getBean(name, clazz);
    }

    @Override
    public void setApplicationContext(ApplicationContext context) throws BeansException {
        applicationContext = context;
    }

    public ApplicationContext getInstance() {
        return applicationContext;
    }
}

3.5 調(diào)用接口,通過ApplicationContextHelper根據(jù)service名稱動態(tài)獲取實現(xiàn)類,調(diào)用方法

@RestController
@RequestMapping("/test")
public class TestController {

    @Resource
    private List<DbService> dbServiceList;

    @GetMapping("/getDbSql2")
    public String getDbSql2(@RequestParam String dbtype){
        DbService dbService = ApplicationContextHelper.popBean(dbtype + "DbService", DbService.class);
        return dbService.getDbSql();
    }
}

3.6 測試

在這里插入圖片描述

到此這篇關(guān)于在SpringBoot中實現(xiàn)適配器模式的兩種方式的文章就介紹到這了,更多相關(guān)SpringBoot適配器模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解Swift中的數(shù)據(jù)類型類型轉(zhuǎn)換

    詳解Swift中的數(shù)據(jù)類型類型轉(zhuǎn)換

    Swift中的類型轉(zhuǎn)換可以結(jié)合類的繼承等面向?qū)ο蟮木幊烫匦詠磉M(jìn)行,本文中我們就來詳解Swift中的數(shù)據(jù)類型類型轉(zhuǎn)換,需要的朋友可以參考下
    2016-07-07
  • Swift 4.2使用self做為變量名淺析

    Swift 4.2使用self做為變量名淺析

    這篇文章主要給大家介紹了關(guān)于Swift 4.2使用self做為變量名的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-09-09
  • Swift中使用可選類型完美解決占位問題

    Swift中使用可選類型完美解決占位問題

    這篇文章主要介紹了Swift中使用可選類型完美解決占位問題,本文講解了為Dictionary增加objectsForKeys函數(shù)、Swift中更簡便的方法、內(nèi)嵌可選類型等內(nèi)容,需要的朋友可以參考下
    2015-05-05
  • 在Swift中如何使用正則表達(dá)式詳解

    在Swift中如何使用正則表達(dá)式詳解

    正則表達(dá)式是對字符串操作的一種邏輯公式,相信大家應(yīng)該都不陌生,下面這篇文章主要給大家介紹了關(guān)于在Swift中如何使用正則表達(dá)式的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2018-09-09
  • Swift實現(xiàn)倒計時5秒功能

    Swift實現(xiàn)倒計時5秒功能

    這篇文章主要為大家詳細(xì)介紹了Swift實現(xiàn)倒計時5秒功能,在“登錄”和“注冊”頁面也有相似功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • Swift快速集成下拉刷新和上拉加載更多示例代碼

    Swift快速集成下拉刷新和上拉加載更多示例代碼

    這篇文章主要介紹了Swift快速集成下拉刷新和上拉加載更多示例代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • 詳解swift中xcworkspace多項目管理

    詳解swift中xcworkspace多項目管理

    給大家詳細(xì)講解了IOS開發(fā)中swift語言xcworkspace多項目管理的方法和介紹,一起參考一下。
    2017-11-11
  • SwiftUI?List在MacOS中的性能優(yōu)化示例

    SwiftUI?List在MacOS中的性能優(yōu)化示例

    這篇文章主要為大家介紹了SwiftUI?List在MacOS中的性能優(yōu)化示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • Swift中動態(tài)調(diào)用實例方法介紹

    Swift中動態(tài)調(diào)用實例方法介紹

    這篇文章主要介紹了Swift中動態(tài)調(diào)用實例方法介紹,在Swift中有一類很有意思的寫法,可以讓我們不直接使用實例來調(diào)用這個實例上的方法,而是通過類型取出這個類型的某個實例方法的簽名,然后再通過傳遞實例來拿到實際需要調(diào)用的方法,需要的朋友可以參考下
    2015-01-01
  • Swift源碼解析之弱引用

    Swift源碼解析之弱引用

    這篇文章主要給大家介紹了關(guān)于Swift源碼解析之弱引用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03

最新評論

贡嘎县| 墨玉县| 潼南县| 隆回县| 彰化市| 颍上县| 嵩明县| 望都县| 盘山县| 丹凤县| 仁布县| 壶关县| 克拉玛依市| 锦州市| 景洪市| 洪雅县| 巴林右旗| 蒙城县| 清水河县| 盐亭县| 西青区| 广东省| 白玉县| 得荣县| 鄂托克旗| 祁连县| 剑河县| 南汇区| 德兴市| 桂阳县| 新巴尔虎左旗| 镇宁| 马鞍山市| 文成县| 大城县| 苍溪县| 贺兰县| 河源市| 乌拉特中旗| 房山区| 济源市|