今天在做分布式簡訊介面服務時,為適應多種平台的相互切換,用工廠的方式實現動態切換,實現靈活配置,思路如下:
一、首先建立乙個介面,該介面有多個實現類,以當前兩個進行測試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 介面有兩個實...