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;
}

你可能感兴趣的:(Java,Spring,SpringBoot,Value设置默认值,value,注入静态属性,Value注解用法,Spring,静态属性赋值,Spring静态属性value)