Springboot如何通过yml配置文件为静态成员变量赋值
通过yml配置文件为静态成员变量赋值
我们对springboot为普通成员变量的方式很熟悉,所以经常定式思维的认为静态属性的赋值和普通属性一样,结果调试的时候调试半天发现静态属性还是Null。
仔细一想才发现静态属性和普通属性的赋值方式不太一样。
到底是哪里不一样呢?问题出在set方法。我们通过idea快捷键或注解 @Data 得到的set方法是静态方法。
这里我强调一句
- 用idea快捷键或注解 @Data 得到的set方法是静态方法
- 用idea快捷键或注解 @Data 得到的set方法是静态方法
- 用idea快捷键或注解 @Data 得到的set方法是静态方法

而springboot为属性赋值时采用的是动态的setter注入,所以我们按照为普通属性赋值的方法给静态变量赋值必然是行不通的。
所以我们只需要将图里面的 static 给删掉就大功告成了!!
顺便再提一句,在这个类上面需要加上 @ConfigurationProperties(prefix = "reggie.qiniu") 注解,并且在调用的地方加上 @EnableConfigurationProperties(QiniuUtils.class) 注解,括号里面的参数不可以跟我一样哦,如果多处都需要调用的话,你嫌麻烦可以直接在springboot启动类上加上这个注解。
怕有的同学还是看不懂,我再贴一下我yml配置文件里面配置的写法。

Springboot静态变量读取yml配置信息
因为spring加载静态方法比IOC早,所以不能直接使用@Value注解读取yml配置,读取结果往往是null。

解决方式1
我们可以通过@PostConstruct在服务加载Servlet的时候运行
@Configuration
public class DemoConfig {
//给静态变量赋值
@Value("${mvc.test}")
public int test;
public void setTest(int test) {
this.test = test;
}
public static int TEST;
@PostConstruct
public void init(){
DemoConfig.TEST = test;
}
}然后在我们需要的地方调用就行了
@Component
public class MyConfig {
public void show(){
System.out.println(DemoConfig.TEST);
}
}解决方式2
我们可以通过@AutoConfigureAfter 来在当前类注入到容器之前去加载相关配置类
@Configuration
public class DemoConfig {
public static int test;
//给静态变量赋值
@Value("${mvc.test}")
public void setTest(int test) {
DemoConfig.test = test;
}
}@AutoConfigureAfter({DemoConfig.class}) //加载当前文件之前先去加载DemoConfig文件
@Component
public class MyConfig {
public void show(){
//然后在我们需要的地方调用就行了
System.out.println(DemoConfig.test);
}
}以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Spring主配置文件(applicationContext.xml) 导入约束详解
在本篇文章里我们给各位整理的是关于Spring主配置文件(applicationContext.xml) 导入约束的相关知识点内容,需要参考下。2019-08-08
idea创建的idea项目时springframework出现红色的原因和解决方法
当使用 IntelliJ IDEA 创建 Spring Framework 项目时,springframework 出现红色可能是因为相关的 Spring Framework 依赖没有正确加载或项目的配置有问题,本文给大家介绍了一些常见的原因和解决方法,需要的朋友可以参考下2023-09-09
Springmvc项目web.xml中servlet-mapping路径映射配置注意说明
这篇文章主要介绍了Springmvc项目web.xml中servlet-mapping路径映射配置注意说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2023-12-12


最新评论