亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

使用Springboot根據(jù)配置文件動態(tài)注入接口實現(xiàn)類

 更新時間:2021年08月14日 09:26:51   作者:iFence  
這篇文章主要介紹了使用Springboot根據(jù)配置文件動態(tài)注入接口實現(xiàn)類,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

Springboot根據(jù)配置文件動態(tài)注入接口實現(xiàn)類

需求

最近在做一個Springboot項目,需要面向不同需求的客戶,但是為了方便管理分支,需要將不同客戶的需求都寫到同一套代碼中,根據(jù)不同客戶實例化對應(yīng)的實現(xiàn)類。

實現(xiàn)

為了盡量不修改代碼,少做不必要的邏輯判斷,我們考慮為不同客戶寫不同的Service,然后根據(jù)配置參數(shù)實例化對應(yīng)的Service。這樣就遇到了需要根據(jù)配置文件實現(xiàn)不同類的需求。

針對這一需求大致有兩種實現(xiàn)方式。但是針對我的需求,能用的只有第二種,但還是想將第一種一起總結(jié)一下。

兩種方式都需要給定義接口,并針對不同客戶對接口做不同實現(xiàn)。

接口類

public interface IAService {
 
    //獲取客戶名,所有客戶都需要,但是需要針對不同客戶做不同實現(xiàn)
    String getCustomName();
}

針對客戶A和B對上面接口實現(xiàn)兩個類

//注意要給Service命名
@Service("customA")
public class IAServiceShijiazhuangImpl implements IAService{
   //A客戶的邏輯
    @Override
    public String getCustomName() {
        return "客戶A";
    }
}
//注意要給Service命名
@Service("customB")
public class IAServiceLinyiImpl implements IAService{
 //客戶B的邏輯
    @Override
    public String getCityName() {
        return "客戶B";
    }
}

Service層寫好以后,需要在Controller層做不同的實現(xiàn)。有兩種方式

1.使用@Qualifier注解

在@Qualifier("customA")上標(biāo)明要實現(xiàn)的類的Service填寫的名字即可。但是這種方式有個弊端。Qualifier注解的參數(shù)必須是常量,無法填寫配置文件的值,因此無法使用配置文件動態(tài)注入,只能動手改代碼,基本是雞肋般的存在。

@RestController
public class AController {
 
 
    //如果要給客戶A部署,這里寫客戶A Service注解的名稱,上面配置的是customA
    @Qualifier("customA")
    IAService iaService;
    
    //不同地區(qū)需要有不同的邏輯,下面service實例化的正好是不同地區(qū)的實例
    @GetMapping("/name")
    public String getCustomName() {
        return iaService.getCityName();
    }
}

2.使用@Resource注解

上面配置了兩個不同客戶Service注解的名稱,我們可以使用Resource注解,通過配置文件的方式進(jìn)行動態(tài)注入。通過配置文件進(jìn)行靈活切換。

其實代碼并沒有多少改動,僅僅是換成了@Resource(name="${local.name}")而已,其中的local.name為從配置文件中要讀取的變量對應(yīng)的值。

@RestController
public class AController {
 
    //根據(jù)配置文件中配置的參數(shù)決定實例化哪個實現(xiàn)類,解決上面問題1
    @Resource(name="${local.name}")
    IAService iaService;
    
    //不同地區(qū)需要有不同的邏輯,下面service實例化的正好是不同地區(qū)的實例
    @GetMapping("/name")
    public String getCustomName() {
        return iaService.getCityName();
    }
}

SpringBoot同一接口多個實現(xiàn)類配置

SpringBoot項目中可能出現(xiàn)一個接口有多個實現(xiàn)類的情況,如果不進(jìn)行配置,注入接口時編譯器不知道要注入哪個實現(xiàn)類就會報錯,因此需要進(jìn)行配置。

以下進(jìn)行舉例:

接口如下:

public interface NoticeService {
    public String noticeUser(Long id);
}

兩個實現(xiàn)類如下:

@Service
public class NoticeServiceImpl1 implements NoticeService {
 public String noticeUser(Long id){
  return noticeServe1(id);
 }
}
@Service
public class NoticeServiceImpl2 implements NoticeService {
 public String noticeUser(Long id){
  return noticeServe2(id);
 }
}

Controller如下:

@Controller
@RequestMapping("notice")
public class NoticeController{
 @Autowired
 NoticeService noticeService;
}

這樣直接啟動后就會報錯,需要在添加@Qualifier注解:

@Controller
@RequestMapping("notice")
public class NoticeController{
 @Autowired
 @Qualifier("impl1")
 NoticeService noticeService;
}

需要調(diào)用的實現(xiàn)類中添加標(biāo)識:

@Service("impl1")
public class NoticeServiceImpl1 implements NoticeService {
 public String noticeUser(Long id){
  return noticeServe1(id);
 }
}

此時再運行即可~

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Http學(xué)習(xí)之組裝報文

    Http學(xué)習(xí)之組裝報文

    這篇文章主要介紹了Http學(xué)習(xí)之組裝報文,組裝報文就是指組裝HTTP響應(yīng)報文,你需要返回客戶請求的相應(yīng)資源,通常一個完整的報文包括報文頭和報文體,一起來看看吧
    2023-04-04
  • sql于navicat中能運行在mybatis中不能運行的解決方案

    sql于navicat中能運行在mybatis中不能運行的解決方案

    這篇文章主要介紹了sql于navicat中能運行在mybatis中不能運行的解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • 淺談Java中hashCode的正確求值方法

    淺談Java中hashCode的正確求值方法

    這篇文章主要介紹了淺談Java中hashCode的正確求值方法,分享了相關(guān)代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02
  • Java文件(io)編程_基于File類的基本用法(必看篇)

    Java文件(io)編程_基于File類的基本用法(必看篇)

    下面小編就為大家?guī)硪黄狫ava文件(io)編程_基于File類的基本用法(必看篇)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • 初識Spring Boot框架和快速入門

    初識Spring Boot框架和快速入門

    這篇文章主要介紹了初識Spring Boot框架學(xué)習(xí),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-04-04
  • 舉例講解Java中的Stream流概念

    舉例講解Java中的Stream流概念

    這篇文章主要介紹了舉例講解Java中的Stream流概念,是Java入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-09-09
  • SpringBoot整合Security權(quán)限控制登錄首頁

    SpringBoot整合Security權(quán)限控制登錄首頁

    這篇文章主要為大家介紹了SpringBoot整合Security權(quán)限控制登錄首頁示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • Mybatis-Plus通過配置在控制臺打印執(zhí)行日志的實現(xiàn)

    Mybatis-Plus通過配置在控制臺打印執(zhí)行日志的實現(xiàn)

    本文主要介紹了Mybatis-Plus通過配置在控制臺打印執(zhí)行日志的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-04-04
  • Java中Exception和Error的區(qū)別詳解

    Java中Exception和Error的區(qū)別詳解

    在 Java 開發(fā)面試中,Exception 和 Error 的區(qū)別是一個經(jīng)典問題,這個問題不僅考察我們對 Java 異常處理機制的理解,還考察我們在實際開發(fā)中如何處理異常的能力,所以本文主要給大家介紹一下Java中Exception和Error的區(qū)別,需要的朋友可以參考下
    2025-04-04
  • Java跳躍游戲?qū)嵗骖}解決思路詳解

    Java跳躍游戲?qū)嵗骖}解決思路詳解

    這篇文章主要介紹了Java跳躍游戲,總的來說這并不是一道難題,那為什么要拿出這道題介紹?拿出這道題真正想要傳達(dá)的是解題的思路,以及不斷優(yōu)化探尋最優(yōu)解的過程。希望通過這道題能給你帶來一種解題優(yōu)化的思路
    2022-10-10

最新評論