学习springboot-条件化配置@Conditional(条件注解)

前言

在Spring Boot中,@Conditional 注解及其相关注解是用于条件化配置的重要工具。它们允许开发者根据特定条件决定是否加载某个Bean或配置类。

注意:@Conditional 相关注解,通常和@Bean搭配使用

学习springboot-Bean管理(Bean 注册,Bean 扫描)_springboot 类扫描 工具-CSDN博客

学习springboot 的自动配置原理-CSDN博客


以下是一些与@Conditional相关的核心注解及其说明:

1. @Conditional(条件注解)

作用 :这是一个基础注解,用于定义条件化的Bean加载。它需要配合具体的条件类使用。
使用场景 :++通常不单独使用,而是通过扩展Condition接口来实现具体的条件逻辑。++

++实例++

java 复制代码
@Bean
@Conditional(MyCondition.class)
public MyBean myBean() {
    return new MyBean();
}

2 .@ConditionalOnClass(基于类存在条件)

作用 :只有当指定的类在类路径中存在时,才加载该Bean或配置类。
使用场景:常用于依赖某些库的场景,例如只有当某个框架的类存在时才启用相关功能。

实例

java 复制代码
@Configuration
@ConditionalOnClass(MyDependencyClass.class)
public class MyConfiguration {
    @Bean
    public MyBean myBean() {
        return new MyBean();
    }
}

3.@ConditionalOnMissingClass(基于类缺失条件)

作用 :只有当指定的类在类路径中不存在时,才加载该Bean或配置类。
使用场景:用于在某些依赖不存在时启用备用逻辑。

实例

java 复制代码
@Configuration
@ConditionalOnMissingClass("com.example.MyDependencyClass")
public class MyFallbackConfiguration {
    @Bean
    public MyFallbackBean myFallbackBean() {
        return new MyFallbackBean();
    }
}

4.@ConditionalOnBean(基于Bean存在条件)

作用 :只有当指定的Bean在Spring容器中存在时,才加载该Bean或配置类。
使用场景:用于依赖其他Bean的场景,确保某些功能只有在相关组件存在时才启用。

实例

java 复制代码
@Configuration
@ConditionalOnBean(MyService.class)
public class MyServiceConfiguration {
    @Bean
    public MyServiceClient myServiceClient(MyService myService) {
        return new MyServiceClient(myService);
    }
}

5.@ConditionalOnMissingBean(基于Bean缺失条件)

作用 :只有当指定的Bean在Spring容器中不存在时,才加载该Bean或配置类。
使用场景:用于提供默认实现,但允许用户通过自定义Bean覆盖默认行为。

实例

java 复制代码
@Configuration
@ConditionalOnMissingBean(MyService.class)
public class DefaultMyServiceConfiguration {
    @Bean
    public MyService myService() {
        return new DefaultMyService();
    }
}

6.@ConditionalOnProperty(基于属性条件)

作用 :根据配置文件中的属性值决定是否加载该Bean或配置类。
使用场景:用于根据配置动态启用或禁用某些功能。

实例

java 复制代码
@Configuration
@ConditionalOnProperty(name = "my.feature.enabled", havingValue = "true")
public class MyFeatureConfiguration {
    @Bean
    public MyFeatureBean myFeatureBean() {
        return new MyFeatureBean();
    }
}

7.@ConditionalOnWebApplication 和 @ConditionalOnNotWebApplication

作用:

@ConditionalOnWebApplication:仅在Web应用上下文中加载。

@ConditionalOnNotWebApplication:仅在非Web应用上下文中加载。
使用场景:用于区分Web应用和非Web应用的配置。

实例

java 复制代码
@Configuration
@ConditionalOnWebApplication
public class WebSpecificConfiguration {
    @Bean
    public WebSpecificBean webSpecificBean() {
        return new WebSpecificBean();
    }
}

8.@ConditionalOnSingleCandidate(基于单一候选Bean条件)

作用 :只有当指定的Bean在Spring容器中是唯一的候选Bean时,才加载该Bean或配置类。
使用场景:用于确保某个Bean的唯一性,避免冲突。

实例

java 复制代码
@Configuration
@ConditionalOnSingleCandidate(MyService.class)
public class MyServiceConfiguration {
    @Bean
    public MyServiceClient myServiceClient(MyService myService) {
        return new MyServiceClient(myService);
    }
}
相关推荐
##学无止境##几秒前
Kafka:Java开发的消息神器,你真的懂了吗?
java·分布式·kafka
mask哥15 分钟前
详解kafka streams(二)
java·大数据·微服务·flink·kafka·stream·流式操作
bjzw16 分钟前
Kafka实际应用场景,总结原理,使用Kafka注意问题,Kafka应用场景
java·kafka
浮游本尊24 分钟前
Java学习第18天 - Kafka消息队列与流式处理
java
wdfk_prog24 分钟前
[Linux]学习笔记系列 -- mm/slub.c SLUB内存分配器(The SLUB Allocator) 现代内核对象缓存的核心
java·linux·运维·c语言·笔记·学习·缓存
g_i_a_o_giao1 小时前
Android8 从系统启动到用户见到第一个Activity的流程源码分析(三)
android·linux·笔记·学习·安卓framework开发·安卓源码分析
华仔啊1 小时前
前后端为个下拉框又吵起来了?一招优雅的 Java 枚举解法,让团队和谐开发!
java·后端
珹洺1 小时前
Java-Spring入门指南(二)利用IDEA手把手教你如何创建第一个Spring系统
java·spring·intellij-idea
星星火柴9361 小时前
C++“类吸血鬼幸存者”游戏制作的要点学习
c++·笔记·学习·游戏
偏执网友1 小时前
idea上传本地项目代码到Gitee仓库教程
java·gitee·intellij-idea