条件注释

除主要的 @conditional 注释外,还有一组类似的注释用于不同的情况。

类条件

@ConditionalOnClass@ConditionalOnMissingClass 注释允许基于特定类的存在或不存在来包括配置。

例如,当 OObjectDatabaseTx.class 被添加到依赖项并且没有 OrientWebConfigurer bean 时,我们创建了配置器。

@Bean
@ConditionalOnWebApplication
@ConditionalOnClass(OObjectDatabaseTx.class)
@ConditionalOnMissingBean(OrientWebConfigurer.class)
public OrientWebConfigurer orientWebConfigurer() {
    return new OrientWebConfigurer();
}

豆条件

@ConditionalOnBean@ConditionalOnMissingBean 注释允许根据特定 bean 的存在或不存在来包含 bean。你可以使用 value 属性按类型指定 bean,或使用 name 来按名称指定 bean。search 属性允许你限制在搜索 bean 时应考虑的 ApplicationContext 层次结构。

当我们检查是否没有定义的 bean 时,请参阅上面的示例。

属性条件

@ConditionalOnProperty 注释允许基于 Spring Environment 属性包含配置。使用 prefix 和 name 属性指定应检查的属性。默认情况下,任何存在且不等于 false 的属性都将匹配。你还可以使用 havingValuematchIfMissing 属性创建更高级的检查。

@ConditionalOnProperty(value='somebean.enabled', matchIfMissing = true, havingValue="yes")
@Bean 
public SomeBean someBean(){
}

资源条件

@ConditionalOnResource 注释仅允许在存在特定资源时包含配置。

@ConditionalOnResource(resources = "classpath:init-db.sql") 

Web 应用程序条件

@ConditionalOnWebApplication@ConditionalOnNotWebApplication 注释允许根据应用程序是否为“Web 应用程序”来包含配置。

@Configuration
@ConditionalOnWebApplication
public class MyWebMvcAutoConfiguration {...}

SpEL 表达条件

@ConditionalOnExpression 注释允许根据 SpEL 表达式的结果包含配置。

@ConditionalOnExpression("${rest.security.enabled}==false")