7

我有以下弹簧配置:

<context:property-placeholder location="classpath:commonSql.properties" />

现在在我的课堂上,当我使用@value("#{someproperty}")它时它不起作用。然后,我改为 @value("${someproperty}")并且它起作用了。

根据这个问题的答案@value("#{someproperty}") 是SpEL语法,它更加强大和复杂。它还可以处理属性占位符,除此之外还有很多,但就我而言,为什么它不起作用?虽然最简单的是如何使用 $ 和 # 来评估值。

主要是@value("#{someproperty}")在工作时@value("${someproperty}")不工作。

4

2 回答 2

4

#{ }是表达式语言功能,${ }而是简单的属性占位符语法。

表达式语言是指有特定的语法、对象、变量等。

当您编写“#{someproperty}”时,您实际上指的是对象和表达式语言引擎回答您:

在“org.springframework.beans.factory.config.BeanExpressionContext”类型的对象上找不到字段或属性“someproperty”

这是可行的:

  @Value("#{'${someproperty}'}")
于 2013-04-17T07:43:37.333 回答
0

这是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
于 2013-04-17T07:42:36.067 回答