Spring @Conditional 动态注入

在平时的业务开发中,经常会用到动态注入的情况,比如某些场景需要引入自己定义的一些配置,或者使用 jar 包自带的一些 bean,在 SpringBoot 中就会经常看到这些,@ConditionalOnMissingBean、@ConditionalOnBean等等,这些在 SpringBoot用的非常广泛,自动注入会经常看到。

在这里插入图片描述
本文重点在于讲解它们的父注解@Conditional,上面说到的,都是@Conditional 的派生子注解,使用此注解可以标注到类上面,也可以标注到方法上面。

使用@Conditional注解,首先需要自定义自己的条件类,实现org.springframework.context.annotation.Condition 接口,通过返回的结果来判断是否需要动态注入,看下面的代码:

public class MyCondition implements Condition {

	/**
	 * 当系统内配置了指定变量后才会生效
	 */
	@Override
	public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
		String systemName = Global.getConfig("app.system.name");
		if (StringUtils.isBlank(systemName) || !StringUtils.equals("TEST.001", systemName)) {
			return false;
		}
		return true;
	}
}

定好了条件类之后,再来看在业务上的应用。

标注再类上面使用:

@Conditional({MyCondition.class})
@Configuration
public class DataSourceConfig {
	
}

标注在方法上面使用:

@Conditional({MyCondition.class})
@Bean
public DataSource dataSource () {
	return null;
}

这里需要注意的是,使用@Conditional注解时,一定要放到@Bean 的前面,否则就起不到动态注入的效果进了。

其实,了解了@Conditional注解的使用,其下面的派生子注解就可以很好的理解了,具体本文不过多赘述。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值