Springboot實(shí)現(xiàn)根據(jù)條件切換注入不同實(shí)現(xiàn)類的示例代碼
最近有個(gè)一需求需要根據(jù)外界環(huán)境的屬性(操作系統(tǒng) || yml屬性 || 其他bean的狀態(tài)) 來實(shí)現(xiàn)啟動(dòng)時(shí)注入兩套不同的實(shí)現(xiàn)類, 實(shí)現(xiàn)切換.
實(shí)現(xiàn)啟動(dòng)時(shí)條件注入分2步:
第一步 使用@Conditional(參數(shù)為 True false條件實(shí)現(xiàn)類 需要你自己實(shí)現(xiàn))注解
@Conditional(RabbitMqCondition.class)public class RabbitmqSMSMsgServiceImpl extends RabbitmqBasicMsgService {// @Autowired(required = false)// DefaultMQProducer producer; @Override public void sendToYourTaskQueue_Step2(PnsMessage pnsMessage) { // TODO rabbitmq 實(shí)現(xiàn)SMS消息推送 }}
第二步 實(shí)現(xiàn)自定義的條件類接口Condition 實(shí)現(xiàn)matches方法:
我這里判斷的是spring配置文件里的屬性, 其實(shí)可以判斷非常廣泛的東西, 并不只限于屬性.
public class RabbitMqCondition implements Condition { @Override public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) { return 'rabbitmq'.equals(conditionContext.getEnvironment().getProperty('mq.type')); }}
application.yml 可以切換屬性
mq: type: rabbitmq
如果要是有多個(gè)符合條件的bean 利用@Service(value=“區(qū)別開來”)
到此這篇關(guān)于Springboot實(shí)現(xiàn)根據(jù)條件切換注入不同實(shí)現(xiàn)類的示例代碼的文章就介紹到這了,更多相關(guān)Springboot 根據(jù)條件切換注入不同實(shí)現(xiàn)類內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. css進(jìn)階學(xué)習(xí) 選擇符2. CSS Hack大全-教你如何區(qū)分出IE6-IE10、FireFox、Chrome、Opera3. css代碼優(yōu)化的12個(gè)技巧4. 低版本IE正常運(yùn)行HTML5+CSS3網(wǎng)站的3種解決方案5. HTML DOM setInterval和clearInterval方法案例詳解6. 詳解瀏覽器的緩存機(jī)制7. HTML <!DOCTYPE> 標(biāo)簽8. CSS3實(shí)例分享之多重背景的實(shí)現(xiàn)(Multiple backgrounds)9. 使用css實(shí)現(xiàn)全兼容tooltip提示框10. 告別AJAX實(shí)現(xiàn)無刷新提交表單
