这篇文章将为大家详细讲解有关利用Springboot如何实现根据条件注入不同实现类,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
最近有个一需求需要根据外界环境的属性(操作系统 || 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如何实现根据条件注入不同实现类就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。