条件注释
除主要的 @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
的属性都将匹配。你还可以使用 havingValue
和 matchIfMissing
属性创建更高级的检查。
@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")