今天,寫**時,突發奇想,每次寫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...