Spring 3.2 A anotação @value com configuração Java pura não funciona, mas Environment.getProperty funciona

Eu tenho quebrado minha cabeça neste aqui. Não tenho certeza do que estou perdendo. Não consigo fazer com que as annotations @Value funcionem em um aplicativo de primavera configurado em java puro (sem 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; } } 

O arquivo de propriedades contém apenas my.prop=avalue O bean é o seguinte:

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

A variável de ambiente imprime o valor corretamente, o @Value não.
avalue
Name: ${my.prop}

A class principal apenas inicializa o contexto.

 AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(Config.class); 

No entanto, se eu usar

 @ImportResource("classpath:property-config.xml") 

com este trecho

  

então funciona bem. Claro que agora o ambiente retorna null .

Adicione a seguinte declaração de bean em sua class Config

 @Bean public static PropertySourcesPlaceholderConfigurer propertyPlaceholderConfigurer() { return new PropertySourcesPlaceholderConfigurer(); } 

Para que @Value annotations de @Value funcionem, PropertySourcesPlaceholderConfigurer deve ser registrado. Isso é feito automaticamente ao usar em XML, mas deve ser registrado como um static @Bean ao usar @Configuration .

Veja a documentação @PropertySource e este problema do Spring Framework Jira .