條件註釋
除主要的 @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")