当前位置: 代码迷 >> 综合 >> SpringBoot使用@Value给静态变量注入值,不能正确读取相应的值。
  详细解决方案

SpringBoot使用@Value给静态变量注入值,不能正确读取相应的值。

热度:80   发布时间:2023-09-19 14:59:24.0

         今天在调试代码的时候发现SpringBoot中使用@Value()给变量赋值,给普通变量赋值是可以的,但是给静态变量即static变量赋值的时候,读取不到相应的值,如果是字符串会读取为null,数字值会读取为0.网上查了一下才发现不能直接给static变量赋值。

 1、SpringBoot中使用@Value()给普通变量注入值:


     在application-dev.properties 配置文件有如下配置:

#TOKEN过期时间
expireDate=180000

给普通变量赋值时,直接在变量声明之上添加@Value()注解即可,如下所示:

@Value("${expireDate}")
private long expireDate;


当要给静态变量注入值的时候,若是在静态变量声明之上直接添加@Value()注解是无效的,虽然没有编译和运行上的报错,经调试可知这种注解方式读取的值会为0.

2、可以使用set()方法赋值:

    其中需要在类上加入@Component注解,方法名(例如setExpireDate)和参数名(例如tokenExpireDate)可以任意命名,如下所示:

	
private static long expireDate;
@Value("${expireDate}")public void setExpireDate(Long tokenExpireDate){expireDate = tokenExpireDate;}

 

这样就可以给static的变量赋值了。