服务器之家

服务器之家 > 正文

Springboot实现根据条件切换注入不同实现类的示例代码

时间:2020-08-24 00:29     来源/作者:李昊轩的博客

最近有个一需求需要根据外界环境的属性(操作系统 || yml属性 || 其他bean的状态) 来实现启动时注入两套不同的实现类, 实现切换.

实现启动时条件注入分2步:

第一步 使用@Conditional(参数为 True false条件实现类 需要你自己实现)注解

?
1
2
3
4
5
6
7
8
9
10
11
12
@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配置文件里的属性, 其实可以判断非常广泛的东西, 并不只限于属性.

?
1
2
3
4
5
6
public class RabbitMqCondition implements Condition {
  @Override
  public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
    return "rabbitmq".equals(conditionContext.getEnvironment().getProperty("mq.type"));
  }
}

application.yml 可以切换属性

?
1
2
mq:
 type: rabbitmq

如果要是有多个符合条件的bean 利用@Service(value=“区别开来”)

到此这篇关于Springboot实现根据条件切换注入不同实现类的示例代码的文章就介绍到这了,更多相关Springboot 根据条件切换注入不同实现类内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/qq_33709508/article/details/108128932

相关文章

热门资讯

2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
歪歪漫画vip账号共享2020_yy漫画免费账号密码共享
歪歪漫画vip账号共享2020_yy漫画免费账号密码共享 2020-04-07
Intellij idea2020永久破解,亲测可用!!!
Intellij idea2020永久破解,亲测可用!!! 2020-07-29
最新idea2020注册码永久激活(激活到2100年)
最新idea2020注册码永久激活(激活到2100年) 2020-07-29
男生常说24816是什么意思?女生说13579是什么意思?
男生常说24816是什么意思?女生说13579是什么意思? 2019-09-17
返回顶部