spring乙個介面多個實現工廠

2021-10-06 12:00:00 字數 1674 閱讀 1745

今天在做分布式簡訊介面服務時,為適應多種平台的相互切換,用工廠的方式實現動態切換,實現靈活配置,思路如下:

一、首先建立乙個介面,該介面有多個實現類,以當前兩個進行測試inte***ceservice

public

inte***ce

inte***ceservice

二、介面實現類inte***ceserviceimpl1,以@service註解的使用方式

@service

("inte***ceserviceimpl1"

)public

class

inte***ceserviceimpl1

implements

inte***ceservice

}

三、介面實現類inte***ceserviceimpl2,以@service註解的使用方式

@service

("inte***ceserviceimpl2"

)public

class

inte***ceserviceimpl2

implements

inte***ceservice

}

四、通過工廠進行切換

@configuration

public

class

inte***cefactory

/** * 根據檔案源獲取具體的實現類

*/public inte***ceservice getinte***ceservice

(string inte***cesource)

inte***ceservice inte***ceservice = map.

get(inte***cesource.

valueof

(inte***cesource));

if(inte***ceservice == null)

return inte***ceservice ;

}}

五、inte***cesource

public

enum inte***cesource

六、 在通過乙個工廠實現多個實現類切換時,要防止bean注入報錯,要在引入時配合註解,有幾種方式

a、@autowired 和 @qualifier 配合注入

@autowired

@qualifier

("inte***ce1impl1"

)inte***ceservice inte***ceservice ;

七、使用@resource注入,根據預設類名區分

@resource

(name =

"inte***ce1impl1"

)inte***ceservice inte***ceservice ;

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

@resource

(name =

"inte***ce1impl1"

)inte***ceservice inte***ceservice ;

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

目的 乙個介面多個實現時,根據不同的條件呼叫不用的實現 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實體注入,關聯到...

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

今天,寫 時,突發奇想,每次寫service層時 都是乙個介面對應乙個實現類,如果有多個實現類實現同乙個介面,那麼在controller層中,注入後呼叫,咋知道到用的是哪個介面的方法,經過一番測試,和查詢資料,終於找到了結果 乙個介面多個實現類,需注入指定的實現類 例如 inte ce 介面有兩個實...