专栏首页强仔仔【SpringBoot系列】static修饰的字段如何获取application.yml配置

【SpringBoot系列】static修饰的字段如何获取application.yml配置

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/linzhiqiang0316/article/details/81516558

今天给大家介绍一下SpringBoot的application.yml一种特殊的应用场景,一般我们获取application.yml的配置文件只要@Value就可以获取到值了,但是如果是static修饰的字段肯定就不能用这种方法了。比如下面这个例子,由static修饰的字段,上面加上@Value明显是获取不到值的。

那基于这种情况下我们该怎么办呢,有些童鞋会说,我们直接用非静态的不就行了。如果这个字段是在非静态的方法里面当然可以了,可是这个方法是在静态方法里面使用的,例如下面所示

这个时候该怎么办呢???别急我们可以这么来,我们可以在@Configuration配置类里面初始化这些值,那怎么初始化呢,不要着急,下面我们一步步来介绍。

首先我们在static修饰的字段添加set方法,然后再@Configuration配置类中进行初始化set值进去。下面是我们@Configuration配置类代码

/**
 * @author linzhiqiang
 * @date 2018-07-31
 * @deprecated 设置静态参数初始化
 */
@Configuration
public class StaticConfig {
    @Value("${push.app.key}")
    private String pushKey;

    @Value("${push.master.secret}")
    private String pushSecret;

    @Value("${cloud.tencent.private.type}")
    private String cloudType;

    @Value("${cloud.tencent.appid}")
    private String cloudAppId;

    @Value("${cloud.tencent.identifier}")
    private String cloudIdentifier;

    @Bean
    public int initStatic() {
        Push.setAppKey(pushKey);
        Push.setMasterSecret(pushSecret);
        CloudSignHelper.setSkdAppid(cloudAppId);
        CloudSignHelper.setTencentPrivateType(cloudType);
        TXCloudHelper.setAppid(cloudAppId);
        TXCloudHelper.setIdentifier(cloudIdentifier);
        return 0;
    }
}

这边说一下为什么initStatic要返回0,我之前是void类型的,可一启动直接就报错了。后面百度之后说 @Bean必须有返回值,所以我这边就返回一个0(没有什么特殊的含义)。

我们再看一下具体static初始化方法,例如

给静态变量加上setget方法,然后我们再静态方发中就可以通过get方法来获取这个值就可以了。

总结:

有些童鞋就会回到第一点那边了,为什么static修饰的字段就不能通过@Value设置值呢,这是因为@Value设置值是通过spring容器来ioc设置值的,可是static修饰的字段在构造函数之前就加载完了,所以是没办法通过@Value来设置值。但是我们却可以通过加set的方法,在@Configuration配置类启动的时候,给static修饰的字段设置新的值,通过这种方式就可以解决这种问题了。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 如何高效的处理第三方接口数据?

    很多公司业务都需要进行第三方接口的对接工作,特别是那种大部分数据都来自第三方的项目。比如亚马逊商家服务的saas系统,基本上所有的数据都来自亚马逊平台。

    林老师带你学编程
  • Mybatis中自定义实例化SqlSessionFactoryBean

    现在SpringBoot基本成为开发的标配,如果你上司让你搭建一个SpringBoot,然后集成Mybatis+Druid,你可以能百度几下,卡卡就搭建完毕了。

    林老师带你学编程
  • AngularJS系列之常用指令

    这节给大家介绍一下AngularJS中一些常用的指令,例如:ng-app、ng-init、ng-repeat、ng-model等等之类的指令。 那什么是Angu...

    林老师带你学编程
  • 接口测试平台中接口内容的设计

    这部分主要是该条case的一些基础信息,例如创建人、最后更新人(同时也是最后调试过该case的人)。因为我们的平台有一个登录系统,所以所有case在被创建和被编...

    软件测试君
  • 优雅的Java工具库Lombok

    最近在公司的项目中看到了对于Lombok的应用,通过@Data注解标注POJO,省略了大量的getter/setter代码,原先冗长的POJO在瘦身之后直接变得...

    互扯程序
  • Linux (RHEL)修改时区

    注意: 1)时区一般建议在安装系统时就选择正确,不建议后期更改 2)tzselect可以指导你如何选择正确的时区,但并不会修改时区

    Alfred Zhao
  • (三) SpringBoot起飞之路-YAML配置小结(入门必知必会)

    这是第三篇,关于YAML配置文件的小结篇,同样有兴趣的朋友可以去了解一下前两篇,感谢大家支持哈

    BWH_Steven
  • Lint Tool Analysis (1)

    本系列的几篇源码分析文档意义不大,如果你正好也在研究lint源码,或者你想知道前面自定义lint规则中提出的那几个问题,抑或你只是想大致了解下lint的源码都有...

    宅男潇涧
  • 常见的几种单例模式

    Spark学习技巧
  • django学习-day05

    # 加载静态文件的两种方法 首先需要确保setting的installed_app中有staticfiles这一项 setting最后面一项中static_...

    kirin

扫码关注云+社区

领取腾讯云代金券