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 ответ:
добавьте следующее объявление bean в свой
Config
класс@Bean public static PropertySourcesPlaceholderConfigurer propertyPlaceholderConfigurer() { return new PropertySourcesPlaceholderConfigurer(); }
для того чтобы
@Value
аннотации к работеPropertySourcesPlaceholderConfigurer
должны быть зарегистрированы. Это делается автоматически при использовании<context:property-placeholder>
в XML, но должен быть зарегистрирован какstatic @Bean
при использовании@Configuration
.посмотреть @PropertySource документация и этот весенний фреймворк Jira issue.