纯Javaconfiguration的Spring 3.2 @value注解不起作用,但是Environment.getProperty起作用

我一直在这一个上打破我的头。 不知道我缺less什么。 我无法获得@Value注释在纯javaconfiguration的spring应用程序中工作(非web)

 @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; } } 

环境variables正确打印值, @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注释工作PropertySourcesPlaceholderConfigurer应该注册。 在XML中使用<context:property-placeholder>时会自动完成,但在使用@Configuration时应该将其注册为static @Bean

请参阅@PropertySource文档和此Spring框架Jira问题 。