Kru*_*hna 7 java spring spring-el
我有以下弹簧配置:
<context:property-placeholder location="classpath:commonSql.properties" />
Run Code Online (Sandbox Code Playgroud)
现在在我的课堂上,当我使用@value("#{someproperty}")它时,它不起作用.然后,我改变了
@value("${someproperty}")它并且它起作用了.
根据这个问题的答案@value("#{someproperty}") 是SpEL语法,它的功能和复杂程度要高得多.它还可以处理属性占位符,还有更多,但在我的情况下,为什么它不起作用?虽然简单的是如何使用$和#来评估价值.
最重要的是@value("#{someproperty}")在工作时@value("${someproperty}")不工作.
#{ }是表达式语言功能,而${ }是简单的属性占位符语法。
表达式语言意味着有特定的语法、对象、变量等。
当你写“#{someproperty}”时,你实际上指的是对象和表达式语言引擎回答你:
在类型“org.springframework.beans.factory.config.BeanExpressionContext”的对象上找不到字段或属性“someproperty”
这是有效的:
@Value("#{'${someproperty}'}")
Run Code Online (Sandbox Code Playgroud)
这是spring的源代码,显示了获取属性键的表达式,原因很明显,也许对你有帮助:)
/**
* Abstract base class for PropertyEditors that need
* to resolve placeholders in paths.
*
* <p>A path may contain ${...} placeholders, to be resolved as
* system properties: e.g. ${user.dir}.
*
* @author Juergen Hoeller
* @since 1.1.2
* @see #PLACEHOLDER_PREFIX
* @see #PLACEHOLDER_SUFFIX
* @see System#getProperty(String)
*/
public class AbstractPathResolvingPropertyEditor extends PropertyEditorSupport {
public static final String PLACEHOLDER_PREFIX = "${";
public static final String PLACEHOLDER_SUFFIX = "}";
protected static final Log logger = LogFactory.getLog(
AbstractPathResolvingPropertyEditor.class);
...etc
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2569 次 |
| 最近记录: |