我一直在打破这个问题。不确定我错过了什么。我无法在纯Java配置的spring应用程序(非Web)中使用@Value
注释
@Configuration
@PropertySource("classpath:app.properties")
public class Config {
@Value("${my.prop}")
String name;
@Autowired
Environment env;
@Bean(name = "myBean", initMethod = "print")
public MyBean getMyBean(){
MyBean myBean = new MyBean();
myBean.setName(name);
System.out.println(env.getProperty("my.prop"));
return myBean;
}
}
属性文件只包含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
。
答案 0 :(得分:101)
在Config
类
@Bean
public static PropertySourcesPlaceholderConfigurer propertyPlaceholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
要使@Value
注释工作PropertySourcesPlaceholderConfigurer
,应注册。在XML中使用<context:property-placeholder>
时会自动完成,但在使用static @Bean
时应注册为@Configuration
。
请参阅@PropertySource文档和此Spring Framework Jira issue。