一、@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;
- }