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);
    }

}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • SpringMVC注解@CrossOrigin跨域问题详解

    SpringMVC注解@CrossOrigin跨域问题详解

    这篇文章主要介绍了SpringMVC注解@CrossOrigin跨域问题详解,跨域是浏览同源策略的造成,是浏览器对JavaScript施加的安全限制CORS是一种可以解决跨域问题的技术,需要的朋友可以参考下
    2023-11-11
  • SpringBoot整合RabbitMQ消息队列的完整步骤

    SpringBoot整合RabbitMQ消息队列的完整步骤

    这篇文章主要给大家介绍了关于SpringBoot整合RabbitMQ消息队列的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • 深入探究Java线程的创建与构造方法

    深入探究Java线程的创建与构造方法

    这篇文章主要给大家分享的是java线程的创建以及构造方法,想了解具体方式的小伙伴可以参考下面文章内容,希望对你有所帮助
    2022-04-04
  • Mybatis防止sql注入原理分析

    Mybatis防止sql注入原理分析

    这篇文章主要介绍了Mybatis防止sql注入原理分析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • Spring条件注解@ConditionnalOnClass的原理分析

    Spring条件注解@ConditionnalOnClass的原理分析

    这篇文章主要介绍了Spring条件注解@ConditionnalOnClass的原理分析,所谓@ConditionalOnClass注解,翻译过来就是基于class的条件,它为所标注的类或方法添加限制条件,当该条件的值为true时,其所标注的类或方法才能生效,需要的朋友可以参考下
    2023-12-12
  • Servlet生命周期与工作原理详解

    Servlet生命周期与工作原理详解

    这篇文章主要为大家详细介绍了Servlet生命周期与工作原理的相关资料,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-04-04
  • Java多线程之Park和Unpark原理

    Java多线程之Park和Unpark原理

    这篇文章主要介绍了Java多线程之Park和Unpark原理,需文中有非常详细的代码示例,对正在学习java的小伙伴们有非常好的帮助,要的朋友可以参考下
    2021-04-04
  • Idea 编译并运行 Spark 3.1.1 源码的方法

    Idea 编译并运行 Spark 3.1.1 源码的方法

    这篇文章主要介绍了Idea 编译并运行 Spark 3.1.1源码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-11-11
  • Java使用分治算法实现排序数索引功能示例【二分搜索】

    Java使用分治算法实现排序数索引功能示例【二分搜索】

    这篇文章主要介绍了Java使用分治算法实现排序数索引功能,结合具体实例形式分析了java分治算法进行排序索引的相关操作技巧,需要的朋友可以参考下
    2017-09-09
  • 简单理解Java的垃圾回收机制与finalize方法的作用

    简单理解Java的垃圾回收机制与finalize方法的作用

    这篇文章主要介绍了简单理解Java的垃圾回收机制与finalize方法的作用,着重讲解了Java的GC销毁对象的过程,需要的朋友可以参考下
    2015-11-11

最新评论