Spring 3.2 @ value аннотация с чистой конфигурацией java не работает,но среда.метод getproperty работает


Я ломал себе голову на этом. Не уверен, что мне не хватает. Я не могу получить @Value аннотации для работы в чистом Java настроен spring app (не 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 боб выглядит следующим образом:

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.

1 52

1 ответ:

добавьте следующее объявление bean в свой Config класс

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

для того чтобы @Value аннотации к работе PropertySourcesPlaceholderConfigurer должны быть зарегистрированы. Это делается автоматически при использовании <context:property-placeholder> в XML, но должен быть зарегистрирован как static @Bean при использовании @Configuration.

посмотреть @PropertySource документация и этот весенний фреймворк Jira issue.