Spring中的常用的条件注解

一、@ConditionalOnMissingBean

  1. 描述:该注解用于在指定的 Bean 不存在时条件化加载或注册相应的 Bean 或配置。
  2. 使用方法:
@Configuration
public class MyConfig {
    @Bean
    @ConditionalOnMissingBean(MyBean.class)
    public MyBean myBean() {
        // 创建 MyBean 的实例
    }
}
  1. 属性:
  • value:指定要检查的 Bean 类型。
  • name:指定要检查的 Bean 的名称。
  1. 常见场景:
    提供默认的 Bean 实现,但允许用户自定义替代实现。
    避免重复注册相同类型的 Bean。

二、@ConditionalOnClass

  1. 描述:该注解用于在指定的类存在于类路径中时条件化加载或注册相应的 Bean 或配置。
  2. 使用方法:
@Configuration
@ConditionalOnClass({ LibraryClass1.class, LibraryClass2.class })
public class MyConfig {
    // 配置条件化的 Bean
}
  1. 属性:
  • value:指定要检查的类。
  1. 常见场景:
    根据类的存在与否来进行条件化的配置。
    为特定类的存在提供不同的实现或配置。

三、@ConditionalOnBean

  1. 描述:该注解用于在容器中存在指定的 Bean 时条件化加载或注册相应的 Bean 或配置。
  2. 使用方法:
@Configuration
@ConditionalOnBean(MyDependencyBean.class)
public class MyConfig {
    // 配置条件化的 Bean
}
  1. 属性:
  • value:指定要检查的 Bean 类型。
  • name:指定要检查的 Bean 的名称。
  1. 常见场景:
    根据已存在的 Bean 来进行条件化的配置。
    只在特定的 Bean 存在时才进行特定的装配。

四、@DependsOn

  1. 描述:该注解通常用于确保 Bean 之间的创建顺序,特别是在有相互依赖关系的情况下,确保特定的 Bean 在其他 Bean 之前创建。
  2. 使用方法:
@Configuration
public class MyConfig {
    @Bean
    public BeanA beanA() {
        // 创建 BeanA 的实例
    }

    @Bean
    @DependsOn("beanA")
    public BeanB beanB() {
        // 创建 BeanB 的实例,依赖于 beanA
    }
}
  1. 属性:
  • value:指定 Bean 的名称,表示当前 Bean 依赖于指定的 Bean。
  1. 常见场景:
    确保某些 Bean 在其他 Bean 创建之前先创建。
    控制 Bean 的创建顺序,解决 Bean 之间的依赖关系。

五、@ConditionalOnProperty

  1. 描述:该注解用于根据配置属性的值条件化加载或注册相应的 Bean 或配置。
  2. 使用方法:
@Configuration
@ConditionalOnProperty(name = "myapp.feature.enabled", havingValue = "true")
public class MyConfig {
    // 配置条件化的 Bean
}
  1. 属性:
  • name:指定要检查的配置属性的名称。
  • havingValue:指定配置属性的值,当与此值匹配时满足条件。
  • matchIfMissing:指定当配置属性缺失时,默认是否满足条件。
  1. 常见场景:
    基于配置属性的值来决定是否加载特定的 Bean 或配置。
    允许用户通过配置文件控制特定功能的开启或关闭。

六、@ConditionalOnExpression

  1. 描述:该注解用于根据 SpEL 表达式的计算结果条件化加载或注册相应的 Bean 或配置。
  2. 使用方法:
@Configuration
@ConditionalOnExpression("#{systemProperties['myapp.environment'] == 'prod'}")
public class MyConfig {
    // 配置条件化的 Bean
}
  1. 属性:
  • value:指定要求计算为 true 的 SpEL 表达式。
  1. 常见场景:
    根据 SpEL 表达式的计算结果来决定是否加载特定的 Bean 或配置。
    基于更复杂的条件逻辑进行条件化配置。

七、@ConditionalOnWebApplication

  1. 描述:该注解用于在 Web 应用程序环境下条件化加载或注册相应的 Bean 或配置。
  2. 使用方法:
@Configuration
@ConditionalOnWebApplication
public class MyConfig {
    // 配置条件化的 Bean
}
  1. 属性:
  • type:指定 Web 应用程序的类型,可选值为 Type.SERVLETType.REACTIVEType.ANY
  1. 常见场景:
    根据应用程序运行环境是否为 Web 应用程序来进行条件化配置。
    提供仅适用于 Web 环境的特定配置或 Bean。

八、@ConditionalOnResource

  1. 描述:该注解用于在类路径下存在指定的资源文件时条件化加载或注册相应的 Bean 或配置。
  2. 使用方法:
@Configuration
@ConditionalOnResource(resources = "classpath:myconfig.properties")
public class MyConfig {
    // 配置条件化的 Bean
}
  1. 属性:
  • resources:指定要检查的资源文件的位置。
  1. 常见场景:
    根据类路径下是否存在指定的资源文件来进行条件化配置。
    提供特定配置或 Bean,仅在所需的资源存在时才加载。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值