Bean条件装配
当有DataSource类型的bean存在就装配
@Bean
@ConditionalOnBean(DataSource.class)
public BeetlUtils getBeetlUtils(){
System.out.println("条件装配");
return new BeetlUtils();
}
当BeetlUtils类型的bean不存在时装配
@Bean
@ConditionalOnMissingBean(BeetlUtils.class)
public BeetlUtils getBeetlUtils(){
System.out.println("条件装配");
return new BeetlUtils();
}
当指定类存在时装配
@Bean
@ConditionalOnClass(BeetlUtils.class)
public BeetlUtils getBeetlUtils(){
System.out.println("条件装配");
return new BeetlUtils();
}
当指定类不存在时装配
@Bean
@ConditionalOnMissingClass("com.boot.beetl.BeetlUtils")
public BeetlUtils getBeetlUtils(){
System.out.println("条件装配");
return new BeetlUtils();
}
envir配置,
其中name对应属性,havingValue表示属性的值为true是生效,
matchIfMissing表示不存在属性是是否生效,默认为false
@Bean
@ConditionalOnProperty(name="allow.to.config",havingValue="true",matchIfMissing=true)
public BeetlUtils getBeetlUtils(){
System.out.println("条件装配");
return new BeetlUtils();
}
根据条件表达式,可以使用spel
@Bean
@ConditionalOnExpression("1==1")
public BeetlUtils getBeetlUtils(){
System.out.println("条件装配");
return new BeetlUtils();
}
上面的可以联合使用
自定义,其实上面的都是根据@Conditional来实现的
@Bean
@Conditional(MyCondition.class)
public BeetlUtils getBeetlUtils(){
System.out.println("条件装配");
return new BeetlUtils();
}
static class MyCondition implements Condition{
@Override
public boolean matches(ConditionContext context,
AnnotatedTypeMetadata metadata) {
//资源加载
ResourceLoader resourceLoader = context.getResourceLoader();
Resource resource = resourceLoader.getResource("classpath:gen.properties");
Environment environment = context.getEnvironment();
return resource.exists();
}
}