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

作者:嗯mua. 时间:2021-08-03 12:03:17 

通过yml配置文件为静态成员变量赋值

我们对springboot为普通成员变量的方式很熟悉,所以经常定式思维的认为静态属性的赋值和普通属性一样,结果调试的时候调试半天发现静态属性还是Null。

仔细一想才发现静态属性和普通属性的赋值方式不太一样。

到底是哪里不一样呢?问题出在set方法。我们通过idea快捷键或注解 @Data 得到的set方法是静态方法。

这里我强调一句

  • 用idea快捷键或注解 @Data 得到的set方法是静态方法

  • 用idea快捷键或注解 @Data 得到的set方法是静态方法

  • 用idea快捷键或注解 @Data 得到的set方法是静态方法

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

而springboot为属性赋值时采用的是动态的setter注入,所以我们按照为普通属性赋值的方法给静态变量赋值必然是行不通的。

所以我们只需要将图里面的 static 给删掉就大功告成了!!

顺便再提一句,在这个类上面需要加上 @ConfigurationProperties(prefix = "reggie.qiniu") 注解,并且在调用的地方加上 @EnableConfigurationProperties(QiniuUtils.class) 注解,括号里面的参数不可以跟我一样哦,如果多处都需要调用的话,你嫌麻烦可以直接在springboot启动类上加上这个注解。

怕有的同学还是看不懂,我再贴一下我yml配置文件里面配置的写法。

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

Springboot静态变量读取yml配置信息

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

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

解决方式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);
   }

}

来源:https://blog.csdn.net/Decade_Faiz/article/details/126238672

标签:Springboot,yml,静态成员,变量赋值
0
投稿

猜你喜欢

  • 一键清除maven仓库中下载失败的jar包的实现方法

    2023-08-13 03:43:59
  • Struts2学习笔记(8)-Result常用类型

    2023-06-05 11:10:19
  • Java删除二叉搜索树最大元素和最小元素的方法详解

    2023-09-30 07:27:09
  • java调用oracle分页存储过程示例

    2021-06-08 12:44:16
  • Java图形用户界面设计(Swing)的介绍

    2022-08-23 03:29:37
  • Android基于SoftReference缓存图片的方法

    2023-07-13 00:53:21
  • 详谈java 堆区、方法区和栈区

    2023-11-23 18:35:22
  • java 按行读取文件并输出到控制台的方法

    2022-10-28 22:48:20
  • SpringBoot+JPA 分页查询指定列并返回指定实体方式

    2021-08-26 11:54:57
  • jQuery 动画效果代码分享

    2023-11-24 00:10:12
  • java中的this引用及对象构造初始化

    2023-03-07 09:38:17
  • SpringBoot自动配置深入探究实现原理

    2023-08-06 09:59:58
  • 手把手教你SpringBoot快速集成Swagger的配置过程

    2023-10-30 01:16:22
  • java中匿名内部类详解

    2022-10-06 14:56:56
  • Java中常见的查找算法与排序算法总结

    2021-07-14 13:21:23
  • spring中bean的生命周期详解

    2021-11-29 23:31:02
  • java新手入门——String类详解

    2022-02-23 08:17:26
  • 浅析java修饰符访问权限(动力节点Java学院整理)

    2023-07-13 18:07:34
  • 使用SpringBoot+EasyExcel+Vue实现excel表格的导入和导出详解

    2023-07-18 18:15:14
  • SpringBoot读取资源目录中JSON文件的方法实例

    2023-04-26 02:00:42
  • asp之家 软件编程 m.aspxhome.com