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

@ConditionalOnExpression条件加载Bean

@ConditionalOnExpression 是 Spring Framework 中用于条件性加载 Bean 的注解,它允许你基于一个 Spring Expression Language (SpEL) 表达式的结果来决定是否加载某个 Bean。在你的例子中,注解中的表达式依据一个配置属性来决定是否启用相关功能。

注解详解

@ConditionalOnExpression("'${cache.clean.enabled:false}'.equals('true')")

这个注解中的表达式主要做了以下几件事:

  1. ${cache.clean.enabled:false}:这是一个 Spring 配置属性占位符。

    1.1 ${cache.clean.enabled} 表示从配置文件(如 application.properties 或 application.yml)中获取 cache.clean.enabled 的值。
    1.2 如果没有找到 cache.clean.enabled 属性,则使用默认值 false。

  2. 'true'.equals(...):这是一个字符串比较操作,它检查属性值是否为 'true'
    2.1 如果配置属性的值为 'true',表达式结果为 true,则注解标注的 Bean 会被加载。
    2.2 如果配置属性的值不是 ‘true’,则表达式结果为 false,该 Bean 将不会被加载。

示例说明:

假设你在 application.properties 中有以下配置:

cache.clean.enabled=true
相关代码
package cn.keking.config;import cn.keking.service.cache.CacheService;
import cn.keking.utils.KkFileUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;/*** @auther: chenjh* @since: 2019/6/11 7:45*/
@Component
@ConditionalOnExpression("'${cache.clean.enabled:false}'.equals('true')")
public class SchedulerCleanConfig {private final Logger logger = LoggerFactory.getLogger(SchedulerCleanConfig.class);private final CacheService cacheService;public SchedulerCleanConfig(CacheService cacheService) {this.cacheService = cacheService;}private final String fileDir = ConfigConstants.getFileDir();//默认每晚3点执行一次@Scheduled(cron = "${cache.clean.cron:0 0 3 * * ?}")public void clean() {logger.info("Cache clean start");cacheService.cleanCache();KkFileUtils.deleteDirectory(fileDir);logger.info("Cache clean end");}
}

那么,@ConditionalOnExpression 中的表达式将解析为 'true'.equals('true'),因此,相关的 Bean 会被加载。

如果没有配置这个属性,默认值是 false,则表达式解析为 'false'.equals('true'),相关的 Bean 不会被加载。


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

相关文章:

  • RestHighLevelClient操作es查询文档
  • 浏览器实时更新esp32-c3 Supermini http server 数据
  • Vue项目兼容IE11
  • Java全栈经典面试题剖析2】JavaSE面向对象1
  • Java中的单元测试与JUnit
  • Axure重要元件三——中继器函数
  • WSL2-轻量级AI训练场景最佳生产环境
  • 前端拦截302重定向
  • Python 代码主要用于处理和分析 OpenFOAM(一种用于计算流体力学的软件)生成的数据,并提供了一些实用的工具函数。
  • HarmonyOS Next应用开发——多种方式实现图片解码
  • 【论文精读】把一切转成mesh!MeshAnything和MeshAnythingV2论文解析
  • 挖掘 M2 Pro 32G UMA 内存潜力:在 Mac 上本地运行清华大模型 ChatGLM2-6B
  • 云服务器遭受攻击后的应急响应与解决策略
  • 【前端Vue学习笔记】组件注册方式 组件传递数据 组件事件 透传 插槽slot 组件生命周期 动态组件 异步组件 依赖注入 Vue应用
  • leetcode动态规划(八)-不同的二叉搜索树
  • 生信学院|10月22日《SOLIDWORKS 自定义属性卡片应用》
  • React第十一章(useReducer)
  • 如何解决企业异地办公网络难题?
  • 持续输出面试题系列之SpringCloud篇
  • 数造科技荣获2024DAMA中国“数据治理创新奖”
  • 4.1粒子系统
  • C++游戏开发入门:用 SDL 实现你的第一个 2D 游戏
  • 汕头市自闭症全托管学校,为孩子打开未来大门
  • consumer 角度讲一下i2c外设
  • 实现了通过摄像头检测手部手势来控制 B 站视频播放的功能。它使用了 OpenCV 进行视频捕获和图像处理,MediaPipe 进行手部检测和关键点识别
  • 五台山景点购票系统——后附计算机源码