Ваша проблема связана с ключевым словом static
. Поскольку инициализация статических полей происходит во многих процессорных циклах до того, как Spring контейнеры запустятся . Так что удалите ключевое слово static
из вашей переменной класса;
@Value("${myFirstName}")
private String myFirstName;
@Value("${myLastName}")
private String myLastName;
РЕДАКТИРОВАТЬ:
Я добавил свой код, который работает правильно. И мой основной класс, который начинает весенний контекст вот так;
public class AppMain {
public static void main(String args[]){
AbstractApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
context.close();
}
}
Так по моему AppConfig.class
вот так;
@Configuration
@ComponentScan(basePackages = "com.example.spring")
@PropertySource(value = {"classpath:application.properties"})
public class AppConfig implements InitializingBean {
@Value("${firstKey}")
private String myFirstName;
@Value("${secondKey}")
private String myLastName;
public void showVariables() {
System.out.println("firstName: " + myFirstName);
System.out.println("lastName: " + myLastName);
}
public void afterPropertiesSet() throws Exception {
showVariables();
}
}
Не заботьтесь о реализации InitializingBean
. Это дает нам то, что вы хотите, когда бин был создан. Как и постконструкция.
Также мой application.configuration
есть;
firstKey = firsKeyValue
secondKey = secondKeyValue
Теперь, когда я запускаю приложение, я вижу этот вывод;
org.springframework.context.annotation.AnnotationConfigApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@37bba400: startup date [Sun Sep 09 11:37:35 EET 2018]; root of context hierarchy
firstName: firsKeyValue
lastName: secondKeyValue
Это работает, я думаю. Примените свои требования и попробуйте один раз.