问题描述
如下代码,在application.properties中定义了属性,通过 @Value("${xxx.xxx}")从properties或者yaml文件中获取的值为null
# application.properties
application.name = yuan
public class PropertyBean {
@Value("${application.name}")
private String applicationName;
}
错误使用一
@Value("${application.name}")是Spring的EL表达式,所以 private String applicationName 所在的类必须交给Spring管理,因此需要在PropertyBean类上增加@Component注解:
public class PropertyBean {
@Value("${application.name}")
private String applicationName;
}
错误使用二
属性被static或者final修饰,需要把static或者final去掉
@Component
public class PropertyBean {
@Value("${application.name}")
private static String applicationName2;
}
错误使用三
使用PropertyBean的地方是new出来而不是通过@Autowired或者@Resource注入,如下代码:
@Service
public class SpringElService {
public String getApplicationName(){
PropertyBean bean = new PropertyBean();
return bean.getApplicationName();
}
}
正确使用
// aplication.properties
application.name = yuan
//
@Component
public class PropertyBean {
@Value("${application.name}")
private String applicationName;
}
@Service
public class SpringElService2 {
@Resource
PropertyBean bean;
public String getApplicationName(){
return bean.getApplicationName();
}
}