You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring应用中如何获取Bean变量值并用于条件表达式

Spring中通过Bean属性实现@ConditionalOnExpression的正确方式

问题原因

你当前使用的表达式${mybean.isXYZ()}是Spring配置占位符语法,用于读取配置文件键值对,而非引用容器内的Bean。SpEL表达式引用Bean需要使用#符号,因此触发了语法解析错误。

正确写法

方式一:修正SpEL表达式

用#{}引用Bean并调用方法,表达式可写为:

@ConditionalOnExpression("#{mybean.isXYZ()} == true")

由于方法返回布尔值,可简化为:

@ConditionalOnExpression("#{mybean.isXYZ()}")

方式二:自定义Condition类(推荐逻辑复杂场景)

如果条件判断逻辑后续可能扩展,建议自定义Condition类,规避SpEL表达式的语法限制:

public class XYZCondition implements Condition {
    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
        ABCConfig abcConfig = context.getBeanFactory().getBean(ABCConfig.class);
        return abcConfig.isXYZ();
    }
}

使用时直接标注自定义Condition:

@Conditional(XYZCondition.class)

内容的提问来源于stack exchange,提问作者Rajeev Hegde

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 23:40:58