Spring 静态属性赋值 @value 注入静态属性 @Value注解用法
Spring 静态属性赋值 @value 注入静态属性 @Value注解用法
一、@Value 用法
1、普通属性赋值 --- 配置文件中若无 user.val.name 属性,则会报错,服务启动失败!
@Value("${user.val.name}")
private String name ;
2、普通属性赋值 --- 默认值,配置文件中若无 user.val.name 属性, 不会报错。
@Value("${user.val.name:小明}")
private String name ;
3、静态属性赋值 --- 错误的
@Value("${user.val.age}")
private static Integer age ;
3.2、静态属性赋值 --- 错误的 ,注意:方法被 static 关键词修饰。
@Value("${user.val.age}")
public static void setAge(Integer age) {
UserVal.age = age;
}
3.3、静态属性赋值 --- 正确的 , 没有 static 修饰
@Value("${user.val.age}")
public void setAge2(Integer age) {
UserVal.age = age;
}
二、Spring 静态属性赋值
1、假设在Spring中有一个静态属性,还可以通过其他的那些方法赋值呢?
private static Integer age ;
2、使用 @PostConstruct 注解,实现静态属性赋值
@Value("${user.val.age}")
private Integer age2;
/**
* 使用 @PostConstruct 注解,实现静态属性赋值
*/
@PostConstruct
public void setAge3(){
UserVal.age = age2;
}
3、实现 InitializingBean 接口,实现静态属性赋值
@Value("${user.val.age}")
private Integer age3;
/**
* 实现 InitializingBean 接口,实现静态属性赋值
*/
@Override
public void afterPropertiesSet() throws Exception {
UserVal.age = age3;
}
三、总结
1、注意点: idea / eclipse ,自动生成 静态属性的 set/get方法时,会自动加上 static 静态修饰,在使用 @Value注解注入值的时候,会导致注入不进去。
/**
* static 静态属性
*/
private static String addr;
/**
* idea /eclipse 自动生成的 set 方法 ,
* 包含 static 修饰,导致 @Value 属性注入无效 (实际未执行!)
*/
@Value("${user.val.addr}")
public static void setAddr(String addr) {
UserVal.addr = addr;
}