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
相关产品推荐
相关产品推荐

