spring boot 无法获取到@value 的值
问题
有时候需要在构造函数中完成一些初始化的操作,而这些操作同时也需要读取一些配置文件中的值。
@Configuration
public class ConfigDemo {
@Value("${url}")
private String url;
public ConfigDemo (){
//此时url null
System.out.println(url);
}
}
原因
主要问题的原因就是,构造函数的执行顺序先于类属性的赋值。在构造函数中使用属性的值且从application.yml通过@Value获取,此时Spring容器还没有向属性赋值。这是Spring Bean的声明周期的属性造成的。
解决办法
@Configuration
public class ConfigDemo implements InitializingBean {
@Value("${url}")
private String url;
public ConfigDemo (){
//此时url null
System.out.println(url);
//or do Other something
}
@Override
public void afterPropertiesSet() throws Exception {
System.out.println(url);
//or do Other init something
}
}
实现InitializingBean重写方法,在属性赋值后进行初始化的操作。将原来的由构造方法的初始化的操作提取到afterPropertiesSet中