在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中的類型轉(zhuǎn)換可以結(jié)合類的繼承等面向?qū)ο蟮木幊烫匦詠磉M(jìn)行,本文中我們就來詳解Swift中的數(shù)據(jù)類型類型轉(zhuǎn)換,需要的朋友可以參考下2016-07-07
SwiftUI?List在MacOS中的性能優(yōu)化示例
這篇文章主要為大家介紹了SwiftUI?List在MacOS中的性能優(yōu)化示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09

