当前位置: 首页 > news >正文

Spring Condition学习

一. 介绍

Condition 是 Spring 中的一个接口,它提供了一种在 Spring 配置中基于特定条件来决定是否注册一个 bean 或者一个配置类的机制。这种机制非常灵活,允许开发者基于环境变量、系统属性、类路径资源等多种条件来动态地包含或排除配置。

需要注意的是:Spring Boot 提供了许多内置的条件注解(如 @ConditionalOnProperty、@ConditionalOnClass 等),这些注解覆盖了大多数常见的使用场景,因此在可能的情况下,应优先考虑使用它们。

二. 使用场景

  • 基于环境的配置:比如,你可能想要在开发环境中启用一个特定的 bean,而在生产环境中则禁用它;
  • 条件性依赖:如果某个类路径下存在某个特定的库,你可能想基于这个库的存在与否来注册相关的 bean;
  • 功能切换:根据某些配置或条件,启用或禁用应用中的某些功能;

Condition 接口包含了一个方法 matches(ConditionContext context, AnnotatedTypeMetadata metadata),这个方法会返回一个布尔值,表示条件是否满足,Spring 容器在注册 bean 或配置类时会调用这个方法,并根据返回值决定是否继续注册;

  • ConditionContext:提供了访问注册 bean 定义的环境(如环境变量、系统属性等)的方法;
  • AnnotatedTypeMetadata:提供了关于正在注册的 bean 或配置类的注解信息;

三. 使用示例

1、自定义 Condition 类,实现 matches();

public class EnvironmentCondition implements Condition {/*** 是否有 his 环境变量*/@Overridepublic boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {Environment environment = context.getEnvironment();String hisProperty = environment.getProperty("his");return StringUtils.isNoneEmpty(hisProperty);}
}

2、配合 @Conditional 注解,可以作用在 @Configuration 和 @Bean 等注解上;

Spring 容器在注册 bean 或配置类时会调用该 condition 的 matches(),并根据返回值决定是否继续注册;

@Slf4j
@Configuration
//@Conditional(EnvironmentCondition.class)
public class ConditionalConfig {@PostConstructpublic void postConstruct() {log.info("ConditionalConfig-----");}@Bean@Conditional(EnvironmentCondition.class)public User myUser() {log.info("myUser-----");User user = new User();return user;}
}

http://www.mrgr.cn/news/2244.html

相关文章:

  • 八股总结----数据库(MySQL和Redis)
  • 【xilinx】Versal Adaptive SoC DDRMC - NoC QoS 选项卡未出现
  • 配置MySQL主从,配置MySQL主主 +keeplive高可用
  • linux 安装GNOME Boxes
  • 聊聊JS中的WebSocket
  • 【vue教程】七. Vue 的动画和过渡
  • 代码随想录算法训练营第十五天(一)| 110.平衡二叉树 (优先掌握递归)257. 二叉树的所有路径
  • dev c++中,在C++11模式下编译带M_PI宏的文件报错的解决办法
  • 封装ajax之类的请求有没有必要考虑超时机制?
  • 景联文科技:图像标注的类型有哪些?
  • 浮点数的使用
  • 【Qt】 常用控件QLCDNumber
  • Leetcode 283 移动零
  • TCP并发服务器
  • 海康相机LinuxSDK CMakeLists.txt
  • flume系列之:定位flume没有关闭某个时间点生成的tmp文件的原因,并制定解决方案
  • 【嵌入式开发之网络编程】网络分层、OSI七层模型、TCP/IP及五层体系结构
  • PE文件格式
  • HarmonyOS开发:长列表界面实现详解(使用懒加载)
  • python3爬虫(未完结)