乙個介面多個實現類,controller層如何操作

2021-10-07 01:30:37 字數 1186 閱讀 7395

今天,寫**時,突發奇想,每次寫service層時

都是乙個介面對應乙個實現類,如果有多個實現類實現同乙個介面,那麼在controller層中,注入後呼叫,咋知道到用的是哪個介面的方法,經過一番測試,和查詢資料,終於找到了結果:

乙個介面多個實現類,需注入指定的實現類

例如:inte***ce 介面有兩個實現類 inte***ceimpl1 和 inte***ceimpl2

//實現類1

@service

public class inte***ceimpl1 implements inte***ce {

//實現類1

@service

public class inte***ceimpl2implements inte***ce {

//業務類,controller

@autowired inte***ce

private inte***ce inte***ce;

按照上面的寫法,啟動服務時會報錯

解決方法

1.指明實現類的優先順序,注入的時候使用優先順序高的實現類

//實現類1

@service

@primary //同乙個介面的實現類,最多只能有乙個新增該註解

public class inte***ceimpl1 implements inte***ce {

在controller中注入介面,預設使用的是primary 標註的實現類的方法

2.通過 @autowired 和 @qualifier 配合注入

@autowired

@qualifier(「inte***ceimpl1」)

inte***ce1 inte***ce1; //正常啟動

3.使用@resource注入,根據預設類名區分

@resource(name = 「inte***ceimpl1」)

inte***ce1 inte***ce1; //正常啟動

4.使用@resource注入,根據@service指定的名稱區分

需要在實現類@service後設定名稱:

@service(「s1」)

public class inte***ceimpl1 implements inte***ce {

@resource(name = 「s1」)

inte***ce1 inte***ce1; //正常啟動

乙個介面多個實現,指定實現類

目的 乙個介面多個實現時,根據不同的條件呼叫不用的實現 1 有如下介面 public inte ce pay2 有如下兩個實現 實現一 service weixinpay public class weixinpay implements pay 實現二 service alipay public ...

Autowired乙個介面有多個實現類

autowired是spring的註解,預設使用的是bytype的方式向bean裡面注入相應的bean。例如 autowired private userservice userservice 這段 會在初始化的時候,在spring容器中尋找乙個型別為userservice的bean實體注入,關聯到...

spring乙個介面多個實現工廠

今天在做分布式簡訊介面服務時,為適應多種平台的相互切換,用工廠的方式實現動態切換,實現靈活配置,思路如下 一 首先建立乙個介面,該介面有多個實現類,以當前兩個進行測試inte ceservice public inte ce inte ceservice 二 介面實現類inte ceservicei...