Spring 3.2 @value annotation with pure java configuration does not work, but Environment.getProperty works-ThrowExceptions

Exception or error:

I’ve been breaking my head on this one. Not sure what I am missing. I am unable to get the @Value annotations to work in a pure java configured spring app(non web)

public class Config {
    String name;

    Environment env;

    @Bean(name = "myBean", initMethod = "print")
    public MyBean getMyBean(){
         MyBean myBean = new MyBean();
         return myBean;

The property file just contains my.prop=avalue The bean is as follows:

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;

The environment variable prints the value properly, the @Value does not.
Name: ${my.prop}

The main class just initializes the context.

AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(Config.class);

However if I use


with this snippet

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

then it works fine. Of course now the enviroment returns null.

How to solve:

Add the following bean declaration in your Config class

public static PropertySourcesPlaceholderConfigurer propertyPlaceholderConfigurer() {
    return new PropertySourcesPlaceholderConfigurer();

In order for @Value annotations to work PropertySourcesPlaceholderConfigurer should be registered. It is done automatically when using <context:property-placeholder> in XML, but should be registered as a static @Bean when using @Configuration.

See @PropertySource documentation and this Spring Framework Jira issue.

Leave a Reply

Your email address will not be published. Required fields are marked *