Spring @Conditional 动态注入

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

Spring @Conditional 动态注入_第1张图片
本文重点在于讲解它们的父注解@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注解的使用,其下面的派生子注解就可以很好的理解了,具体本文不过多赘述。

你可能感兴趣的:(Spring,#,SpringBoot)