Springboot實現根據條件切換注入不同實現類的示例程式碼
阿新 • • 發佈:2020-08-24
最近有個一需求需要根據外界環境的屬性(作業系統 || yml屬性 || 其他bean的狀態) 來實現啟動時注入兩套不同的實現類,實現切換.
實現啟動時條件注入分2步:
第一步 使用@Conditional(引數為 True false條件實現類 需要你自己實現)註解
@Conditional(RabbitMqCondition.class) public class RabbitmqSMSMsgServiceImpl extends RabbitmqBasicMsgService { // @Autowired(required = false) // DefaultMQProducer producer; @Override public void sendToYourTaskQueue_Step2(PnsMessage pnsMessage) { // TODO rabbitmq 實現SMS訊息推送 } }
第二步 實現自定義的條件類介面Condition 實現matches方法:
我這裡判斷的是spring配置檔案裡的屬性,其實可以判斷非常廣泛的東西,並不只限於屬性.
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
如果要是有多個符合條件的bean 利用@Service(value=“區別開來”)
到此這篇關於Springboot實現根據條件切換注入不同實現類的示例程式碼的文章就介紹到這了,更多相關Springboot 根據條件切換注入不同實現類內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!