條件註釋

除主要的 @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")