@Value注解介绍:
作为Spring的一个常用注解,其作用是通过注解将常量、配置文件中的值和其他bean的属性值注入到变量中,作为变量的初始值。

@Value("${login.name}")
private String loginName;

@value不能直接注入值给静态变量

@Value("${login.name}")
private static String loginName;

在Java中,静态变量也称为类变量。也就是说,它们属于一个类,而不是一个特定的实例。因此,类初始化的时候也将初始化静态变量相反,类的实例 初始化的时候也将初始化 实例变量(非静态变量)。类的所有实例共享该类的静态变量。

@value 是在 bean实例化后,在属性填充过程中进行赋值的,static初始化要早于@value。

实际场景中,常量需要通过配置文件来配置,该怎么办?

第一种方式:

把@Value(value=“${local.file.temp.dir}”)放到静态变量的set方法上面即可,需要注意的是set方法要去掉static,还有就是当前类要交给spring来管理

    /**文件存储目录*/public static String SAVE_PATH;//记得去掉static@Value("${local.file.temp.dir}")public void setSavePath(String savePath){SAVE_PATH = savePath;}

配置文件:

local:file:temp:dir : /data/temp

第二种方式:

使用 @postconstruct

    /**文件存储目录*/public static String SAVE_PATH;@Value("${local.file.temp.dir}")public String SAVE_PATH_TEMP;@PostConstructprivate void init(){SAVE_PATH = SAVE_PATH_TEMP;}@GetMapping("test")public void test(){System.out.println(SAVE_PATH);}

@PostConstruct 是在 bean 初始化(initializeBean)过程中调用的,是在@value之后调用的,可以通过这种方式给静态变量赋值。

第三种方式:

实现InitializingBean 接口

public class IndexController implements InitializingBean {/**文件存储目录*/public static String SAVE_PATH;@Value("${local.file.temp.dir}")public String SAVE_PATH_TEMP;@GetMapping("test")public void test(){System.out.println(SAVE_PATH);}@Overridepublic void afterPropertiesSet() throws Exception {SAVE_PATH = SAVE_PATH_TEMP;}
}

InitializingBean 接口也是在bean初始化(initializeBean)过程中调用的,具体可以看下spring bean 的实例化过程。

使用 @value 注解读取配置文件给静态变量赋值的方法给大家介绍到这里,希望对大家有所帮助。

Java非静态变量给静态变量赋值相关推荐

  1. java无法从静态上下文_java - “非静态方法无法从静态上下文中引用”背后的原因是什么?...

    java - "非静态方法无法从静态上下文中引用"背后的原因是什么? 这个问题在这里已有答案: 无法从静态上下文引用非静态变量                            ...

  2. java 静态变量和非静态_Java中静态和非静态变量之间的区别

    变量为我们提供了程序可以操纵的命名存储.Java中的每个变量都有一个特定的类型,该类型确定变量的内存大小和布局.可以存储在该内存中的值的范围:以及可以应用于该变量的一组操作. 静态变量 静态变量也称为 ...

  3. java 中的静态变量,静态代码块,动态代码块,构造方法执行顺序的深入探究

    要想完全弄懂这个执行顺序,需要我们先了解几个概念. 首先是类加载与对象的构造,类加载就是在第一次调用这个类的时候jvm虚拟机会通过类加载器在一个叫做方法区的逻辑内存中将所要用到的类的信息存放在里边,其 ...

  4. 关于Java静态成员变量和静态初始化块等的初始化顺序的详细介绍

    关于Java静态成员变量和静态初始化块等的初始化顺序的详细介绍 对于主动请求一个类时,JVM首先会将该类加载到内存中,先初始化该类的静态成员变量和静态初始化块. 主动请求一个类的情形: a.调用类A的 ...

  5. Java 静态变量,静态方法,静态常量(java static 关键字)

    Java 静态变量,静态方法,静态常量  就是变量 ,方法,常量前面添加了static 关键字 为什么要使用静态的呢 有时候在处理问题时会需要两个类在同一个内存区域共享一个数据, 不如现在 Main ...

  6. jni java共享变量_Android JNI开发系列(十)JNI访问 Java 实例变量和静态变量

    JNI访问 Java 实例变量和静态变量 Java 中的实例变量和静态变量,在本地代码中如何来访问和修改.静态变量也称为类变量(属性),在所有实例对象中共享同一份数据,可以直接通过类名.变量名来访问. ...

  7. java线程安全问题之静态变量、实例变量、局部变量

    转载 java多线程编程中,存在很多线程安全问题,至于什么是线程安全呢,给出一个通俗易懂的概念还是蛮难的,如同<java并发编程实践>中所说: 写道 给线程安全下定义比较困难.存在很多种定 ...

  8. java 线程安全问题之静态变量、实例变量、局部变量

    2019独角兽企业重金招聘Python工程师标准>>> java多线程编程中,存在很多线程安全问题,至于什么是线程安全呢,给出一个通俗易懂的概念还是蛮难的,如同<java并发编 ...

  9. java 静态全局变量_静态变量static和全局变量global

    静态变量static , 全局变量global 静态变量 在java也叫类变量从名字可以看出它是属于某个类的而不是类的实例.它的关键字是static存储在静态存储区,当程序执行,类的代码被加载到内存, ...

  10. Java 静态类、静态方法和静态变量

    转载自Java 静态类.静态方法和静态变量 Java 静态类.静态方法和静态变量 static 是Java中的一个关键字,我们不能声明普通外层类或者包为静态的.static用于下面四种情况. 1.静态 ...

最新文章

  1. 20行Python代码把自己塑造成一位素描大师
  2. Java中的static关键字详解
  3. 【Centos 7】【Docker】 安装 kafka
  4. webform计算某几列结果,如何在C#webform中使用LiveView来垂直显示某些字段,在一个表格中水平显示一些字段作为填写表单?...
  5. python数据库def函数_Python:函数
  6. GBK与GB2312
  7. [Vue] Vue后台模板汇总
  8. php字符串分割函数,PHP字符串分割函数explode,strtok,str_split的用法
  9. vbs如何调用c语言函数,vbscript基础教程-自定义函数和过程
  10. linux编程 定时器,Linux 定时器编程
  11. 基于JMF RTP的音视频传输
  12. ES集群单机(单节点/多节点)搭建
  13. JNCIS翻译文档之------接口
  14. ctf音频yinxie_CTF牛刀小试合集
  15. 拿到offer后 还应该继续去面试?
  16. cmd中通过winsat命令测试硬盘、CPU、内存、3d性能等
  17. Hive2.x、HiveServer、HiveServer2简述及Beeline使用
  18. 通过xshell命令方式下载文件
  19. 手把手解决“npm、node不是内部或外部命令,也不是可运行的程序或批处理文件”
  20. Node.js项目中动态加载环境变量配置

热门文章

  1. H3C对接外部Portal+Radius认证计费系统实现mac-trigger快速认证Mac无感知认证并结合L2TP实现阿里云部署对接配置
  2. 区块链-以太坊学习资料汇总
  3. 单片机中的上电复位 和手动复位
  4. java中的三种移位运算符
  5. c#在output窗口输出调试信息
  6. 蒲公英内测分发平台使用体验
  7. 计算机pc at代表什么意思啊,PC/XT 与PC/AT的分别?
  8. 二分图的最大匹配-解决匹配问题
  9. 网络协议分析(3):FTP
  10. 专升本——非谓语动词