纯java配置的Spring3.2@value注释不起作用,但Environment.getProperty起作用
这件事让我伤了脑筋。不知道我错过了什么。我无法在纯java配置的spring应用程序(非web)中使用纯java配置的Spring3.2@value注释不起作用,但Environment.getProperty起作用,java,spring,Java,Spring,这件事让我伤了脑筋。不知道我错过了什么。我无法在纯java配置的spring应用程序(非web)中使用@Value注释 属性文件只包含my.prop=avaluebean如下所示: public class MyBean { String name; public void print() { System.out.println("Name: " + name); } public String getName() { retur
@Value
注释
属性文件只包含my.prop=avalue
bean如下所示:
public class MyBean {
String name;
public void print() {
System.out.println("Name: " + name);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
环境变量正确打印值,而@value
不正确。avalue
Name:${my.prop}
主类只是初始化上下文
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(Config.class);
但是如果我使用
@ImportResource("classpath:property-config.xml")
用这个片段
<context:property-placeholder location="app.properties" />
那么它工作得很好。当然,现在环境返回
null
在Config
类中添加以下bean声明
@Bean
public static PropertySourcesPlaceholderConfigurer propertyPlaceholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
为了使@Value
注释正常工作,应注册属性资源占位符配置器。在XML中使用
时会自动完成,但在使用@Configuration
时应注册为静态@Bean
请参阅文档和此Spring框架。这非常有效!spring doc@配置忽略了这一点。导致所有这些混乱+1-令人尴尬的是,我在开始一个新项目时似乎总是忘记这一点,每次我都会找到这个答案。将bean注册为“静态”是我的关键。谢谢,我没用。
@Bean
public static PropertySourcesPlaceholderConfigurer propertyPlaceholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}