前言
在Spring Boot中,@Conditional 注解及其相關注解是用于條件化配置的重要工具。它們允許開發者根據特定條件決定是否加載某個Bean或配置類。
注意:@Conditional 相關注解,通常和@Bean搭配使用
學習springboot-Bean管理(Bean 注冊,Bean 掃描)_springboot 類掃描 工具-CSDN博客
學習springboot 的自動配置原理-CSDN博客
以下是一些與@Conditional相關的核心注解及其說明:
1. @Conditional(條件注解)
作用:這是一個基礎注解,用于定義條件化的Bean加載。它需要配合具體的條件類使用。
使用場景:通常不單獨使用,而是通過擴展Condition接口來實現具體的條件邏輯。
實例
@Bean
@Conditional(MyCondition.class)
public MyBean myBean() {return new MyBean();
}
2 .@ConditionalOnClass(基于類存在條件)
作用:只有當指定的類在類路徑中存在時,才加載該Bean或配置類。
使用場景:常用于依賴某些庫的場景,例如只有當某個框架的類存在時才啟用相關功能。
實例
@Configuration
@ConditionalOnClass(MyDependencyClass.class)
public class MyConfiguration {@Beanpublic MyBean myBean() {return new MyBean();}
}
3.@ConditionalOnMissingClass(基于類缺失條件)
作用:只有當指定的類在類路徑中不存在時,才加載該Bean或配置類。
使用場景:用于在某些依賴不存在時啟用備用邏輯。
實例
@Configuration
@ConditionalOnMissingClass("com.example.MyDependencyClass")
public class MyFallbackConfiguration {@Beanpublic MyFallbackBean myFallbackBean() {return new MyFallbackBean();}
}
4.@ConditionalOnBean(基于Bean存在條件)
作用:只有當指定的Bean在Spring容器中存在時,才加載該Bean或配置類。
使用場景:用于依賴其他Bean的場景,確保某些功能只有在相關組件存在時才啟用。
實例
@Configuration
@ConditionalOnBean(MyService.class)
public class MyServiceConfiguration {@Beanpublic MyServiceClient myServiceClient(MyService myService) {return new MyServiceClient(myService);}
}
?5.@ConditionalOnMissingBean(基于Bean缺失條件)
作用:只有當指定的Bean在Spring容器中不存在時,才加載該Bean或配置類。
使用場景:用于提供默認實現,但允許用戶通過自定義Bean覆蓋默認行為。
實例
@Configuration
@ConditionalOnMissingBean(MyService.class)
public class DefaultMyServiceConfiguration {@Beanpublic MyService myService() {return new DefaultMyService();}
}
6.@ConditionalOnProperty(基于屬性條件)
作用:根據配置文件中的屬性值決定是否加載該Bean或配置類。
使用場景:用于根據配置動態啟用或禁用某些功能。
實例
@Configuration
@ConditionalOnProperty(name = "my.feature.enabled", havingValue = "true")
public class MyFeatureConfiguration {@Beanpublic MyFeatureBean myFeatureBean() {return new MyFeatureBean();}
}
7.@ConditionalOnWebApplication 和 @ConditionalOnNotWebApplication
作用:
@ConditionalOnWebApplication:僅在Web應用上下文中加載。
@ConditionalOnNotWebApplication:僅在非Web應用上下文中加載。
使用場景:用于區分Web應用和非Web應用的配置。
實例
@Configuration
@ConditionalOnWebApplication
public class WebSpecificConfiguration {@Beanpublic WebSpecificBean webSpecificBean() {return new WebSpecificBean();}
}
8.@ConditionalOnSingleCandidate(基于單一候選Bean條件)
作用:只有當指定的Bean在Spring容器中是唯一的候選Bean時,才加載該Bean或配置類。
使用場景:用于確保某個Bean的唯一性,避免沖突。
實例
@Configuration
@ConditionalOnSingleCandidate(MyService.class)
public class MyServiceConfiguration {@Beanpublic MyServiceClient myServiceClient(MyService myService) {return new MyServiceClient(myService);}
}