@Conditionnal(someCondition.class)
someCondition--某個(gè)實(shí)現(xiàn)Condition接口的類
用于根據(jù)條件實(shí)例化Bean或配置
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MyConfiguration {
@Bean(name="emailerService")
@Conditional(WindowsCondition.class)
public EmailService windowsEmailerService(){
return new WindowsEmailService();
}
@Bean(name="emailerService")
@Conditional(LinuxCondition.class)
public EmailService linuxEmailerService(){
return new LinuxEmailService();
}
}
- @ConditionalOnBean(僅僅在當(dāng)前上下文中存在某個(gè)對(duì)象時(shí),才會(huì)實(shí)例化一個(gè)Bean)
- @ConditionalOnClass(某個(gè)class位于類路徑上,才會(huì)實(shí)例化一個(gè)Bean)
- @ConditionalOnExpression(當(dāng)表達(dá)式為true的時(shí)候,才會(huì)實(shí)例化一個(gè)Bean)
- @ConditionalOnMissingBean(僅僅在當(dāng)前上下文中不存在某個(gè)對(duì)象時(shí),才會(huì)實(shí)例化一個(gè)Bean)
- @ConditionalOnMissingClass(某個(gè)class類路徑上不存在的時(shí)候,才會(huì)實(shí)例化一個(gè)Bean)
- @ConditionalOnNotWebApplication(不是web應(yīng)用
或者可以這樣理解:
- @ConditionalOnClass:該注解的參數(shù)對(duì)應(yīng)的類必須存在,否則不解析該注解修飾的配置類;
- @ConditionalOnMissingBean:該注解表示,如果存在它修飾的類的bean,則不需要再創(chuàng)建這個(gè)bean;可以給該注解傳入?yún)?shù)例如-
@ConditionOnMissingBean(name = "example"),這個(gè)表示如果name為“example”的bean存在,這該注解修飾的代碼塊不執(zhí)行。