0

我正在尝试构建一个 spring 3.0 应用程序版本 3.1.0.RELEASE ,我想从属性文件中读取并在我的 Component 类中使用从它读取的 @Value 注释。为此,我所做的更改:在 mvc-dispatcher-servlet.xml 中:

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

组件类:

@Component

公共类 SomeHelper {

@Value("${baseUri}")
private String baseUri;

public String getBaseUri() {
    return baseUri;
}

public void setBaseUri(String baseUri) {
    this.baseUri = baseUri;
}
}

财产:

baseUri:http://localhost:8080/

我已经使用@Autowired 注释将此助手类连接到@service 类。当我构建和部署应用程序时,出现以下错误:

java.lang.IllegalArgumentException: Could not resolve placeholder 'baseUri'
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:287)

有什么我遗漏的,因为我只是遵循标准程序。

提前感谢任何帮助。

-毗婆婆

4

5 回答 5

1

使用=而不是:作为分隔符

baseUri=http://localhost:8080/
于 2013-09-12T08:33:38.533 回答
0

假设您遵循拥有 aContextLoaderListener和 a的正常做法,请DispatcherServlet确保a<context:property-placeholder location="classpath:mediamonitoring.properties"/>位于正确的应用程序上下文中。它只会对同一应用程序上下文中的 bean 进行操作,而不会对父或子上下文中的 bean 进行操作。

于 2013-09-12T09:33:49.817 回答
0

不能评论,需要更多代表,所以使用 asnwer 选项。检查你把你的 mediamonitoring.properties 放在哪里。我的意思是,检查它是否在你的类路径中

于 2013-09-12T08:14:35.660 回答
0

替换:=并使用#代替$

#{baseUri}

您也可以尝试使用:

<util:properties id="props"
    location="classpath:/yourproperties.properties" />

然后:

@Value("#{props['yourProperty']}")
于 2013-09-12T09:30:00.400 回答
0

您应该转义特殊字符:=使用\如下值:

baseUri:http\://localhost\:8080/

否则解析器无法决定您的价值在哪里结束以及新密钥在哪里开始。
另请参阅Java 属性文件规范

于 2013-09-12T08:31:08.157 回答