[JAVA] Springboot如何通过yml配置文件为静态成员变量赋值

2339 0
黑夜隐士 2022-11-9 09:46:55 | 显示全部楼层 |阅读模式
目录

    通过yml配置文件为静态成员变量赋值
      这里我强调一句
    Springboot静态变量读取yml配置信息
      解决方式1解决方式2



通过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的时候运行
  1. @Configuration
  2. public class DemoConfig {
  3.     //给静态变量赋值
  4.     @Value("${mvc.test}")
  5.     public  int test;
  6.     public void setTest(int test) {
  7.         this.test = test;
  8.     }
  9.     public static   int TEST;
  10.     @PostConstruct
  11.     public  void init(){
  12.         DemoConfig.TEST = test;
  13.     }
  14. }
复制代码
然后在我们需要的地方调用就行了
  1. @Component
  2. public class MyConfig {
  3.     public  void show(){
  4.         System.out.println(DemoConfig.TEST);
  5.     }
  6. }
复制代码
解决方式2

我们可以通过@AutoConfigureAfter 来在当前类注入到容器之前去加载相关配置类
  1. @Configuration
  2. public class DemoConfig {
  3.     public static int test;
  4.     //给静态变量赋值
  5.     @Value("${mvc.test}")
  6.     public void setTest(int test) {
  7.         DemoConfig.test = test;
  8.     }
  9. }
复制代码
  1. @AutoConfigureAfter({DemoConfig.class})  //加载当前文件之前先去加载DemoConfig文件
  2. @Component
  3. public class MyConfig {
  4.     public  void show(){
  5.         //然后在我们需要的地方调用就行了
  6.         System.out.println(DemoConfig.test);
  7.     }
  8. }
复制代码
以上为个人经验,希望能给大家一个参考,也希望大家多多支持中国红客联盟。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2025 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行