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

 更新时间:2022年10月27日 17:18:31   作者:嗯mua.  
这篇文章主要介绍了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中如何使用设计模式

    浅谈Spring中如何使用设计模式

    这篇文章主要介绍了浅谈Spring中如何使用设计模式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05
  • Linux中Java开发常用软件安装方法总结

    Linux中Java开发常用软件安装方法总结

    这篇文章主要介绍了Linux中Java开发常用软件安装方法总结,需要的朋友可以参考下
    2020-02-02
  • Java导出网页表格Excel过程详解

    Java导出网页表格Excel过程详解

    这篇文章主要介绍了Java导出网页表格Excel过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • JavaWeb文件上传与下载功能解析

    JavaWeb文件上传与下载功能解析

    这篇文章主要为大家详细介绍了JavaWeb文件上传与下载功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-06-06
  • Java Hibernate中一对多和多对多关系的映射方式

    Java Hibernate中一对多和多对多关系的映射方式

    Hibernate是一种Java对象关系映射框架,支持一对多和多对多关系的映射。一对多关系可以使用集合属性和单向/双向关联来映射,多对多关系可以使用集合属性和中间表来映射。在映射过程中,需要注意级联操作、延迟加载、中间表的处理等问题
    2023-04-04
  • 关于SpringGateway调用服务 接受不到参数问题

    关于SpringGateway调用服务 接受不到参数问题

    这篇文章主要介绍了关于SpringGateway调用服务接受不到参数问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • JAVA反射机制实例详解

    JAVA反射机制实例详解

    这篇文章主要介绍了JAVA反射机制,以实例形式较为详细的分析讲解了Java反射机制的具体概念、功能与使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-11-11
  • 图解Java排序算法之归并排序

    图解Java排序算法之归并排序

    这篇文章主要为大家详细介绍了Java经典排序算法之归并排序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • Java8并发新特性CompletableFuture

    Java8并发新特性CompletableFuture

    这篇文章主要介绍了Java8并发新特性CompletableFuture,CompletableFuture针对Future接口做了改进,相比Callable/Runnable接口它支持多任务进行链式调用、组合、多任务并发处理,下面文章更多相关内容得介绍,需要的小伙伴可以参考一下
    2022-06-06
  • SpringBoot整合Security权限控制登录首页

    SpringBoot整合Security权限控制登录首页

    这篇文章主要为大家介绍了SpringBoot整合Security权限控制登录首页示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11

最新评论