【发布时间】:2015-01-11 01:17:38
【问题描述】:
最初,我有以下规格:
@Value("#{props.isFPL}")
private boolean isFPL=false;
这可以正常从属性文件中获取值:
isFPL = true
但是,以下带有默认值的表达式会导致错误:
@Value("#{props.isFPL:false}")
private boolean isFPL=false;
表达式解析失败;嵌套异常是 org.springframework.expression.spel.SpelParseException: EL1041E:(pos 28): 解析有效表达式后,表达式中还有更多数据:'colon(:)'
我也尝试使用 $ 而不是 #。
@Value("${props.isFPL:true}")
private boolean isFPL=false;
然后注释中的默认值可以正常工作,但我没有从属性文件中得到正确的值:
【问题讨论】:
-
#{}是一个表达式,${}是一个值的占位符。您使用的第一个表达式将在名为 props 的 bean 上调用方法/属性,带有占位符的表达式将尝试在Environment中找到名为props.isFPL的属性。您应该使用后者,但您可能以错误的方式加载属性。 -
谢谢。如果我以错误的方式加载属性,为什么 #{} 会选择正确的值?
-
因为这是一个表达式而不是占位符。它们都以完全不同的方式进行评估。
标签: java spring properties annotations