SpringBoot的@Value给静态变量注入application.properties属性值

 更新时间:2023年05月19日 08:34:18   作者:长安明月  
这篇文章主要介绍了SpringBoot的@Value给静态变量注入application.properties属性值,Spring是一个开源的框架,主要是用来简化开发流程,通过IOC,依赖注入(DI)和面向接口实现松耦合,需要的朋友可以参考下

一、问题描述

如果在 SpringBoot 项目中的 application.properties 配置了某个属性(假如属性名为 test.key),我们可以在 controller 层或 service 层使用 @Value 标签获取属性值,如下代码所示。

package com.test.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TestController {
    @Value("${test.key}")
    public String testKey;
}

也可以在一个 Java 文件中,打上 @Component 标签,再使用上述 @Value 标签,同样可以获取到配置文件中的属性值。

但是,如果项目中需要给静态变量注入配置文件中的属性值的话(也就是,给 static 修饰的变量做 @Value 注入),发现变量值为 null。示例代码如下所示。

@Value("${test.key}")
    public static String testKey;

上述代码,静态变量并未成功注入值。

@Value 只能给普通变量做值注入。那么如何给静态变量做值注入呢?

二、解决方法

在类名上加 @Component 注解(如果 Java 文件是 controller 或 service 这些已经被 Spring 注入管理的类的话,则不需要再额外打该标签)使用 setXXX(abc) 方法,并在 setXXX(abc) 方法上加上 @Value 注解。如下代码示例。

package com.test.utils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Slf4j
@Component
public class SignUtil {
    public static String filepath = null;
    @Value("${filepath}")
    public void setFilePath(String filepath) {
        log.info("静态变量 filepath 赋值:[{}]", filepath);
        SignUtil.filepath = filepath;
    }
}

备注:

如果是 IDEA 为静态变量生成的 set 方法,会在方法上带上 static 修饰符,这样是不行的,需要去掉 static 修饰符。

到此这篇关于SpringBoot的@Value给静态变量注入application.properties属性值的文章就介绍到这了,更多相关SpringBoot的@Value注入属性值内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java ES(Elasticsearch) 中的and 和 or 查询

    Java ES(Elasticsearch) 中的and 和 or 查

    Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎,es中match查询中,查询字符串分词后,默认是or或者的关系,这篇文章主要介绍了ES 中的and 和 or 查询,需要的朋友可以参考下
    2022-11-11
  • 深入探究MyBatis插件机制灵活扩展及自定义增强框架能力

    深入探究MyBatis插件机制灵活扩展及自定义增强框架能力

    这篇文章主要介绍了深入探究MyBatis插件机制灵活扩展及自定义增强框架能力
    2024-01-01
  • jdk动态代理和cglib动态代理详解

    jdk动态代理和cglib动态代理详解

    本篇文章主要介绍了深度剖析java中JDK动态代理机制 ,动态代理避免了开发人员编写各个繁锁的静态代理类,只需简单地指定一组接口及目标类对象就能动态的获得代理对象
    2021-07-07
  • Java实现学生选课管理系统

    Java实现学生选课管理系统

    这篇文章主要为大家详细介绍了Java实现学生选课管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • 浅谈Java父子类加载顺序

    浅谈Java父子类加载顺序

    本文主要介绍了Java父子类加载顺序,那么这么长怎么记呀?本文就帮大家总结一下,更有利于记忆,感兴趣的可以了解一下
    2021-08-08
  • Spring框架花式创建Bean的n种方法(小结)

    Spring框架花式创建Bean的n种方法(小结)

    这篇文章主要介绍了Spring框架花式创建Bean的n种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • 以实例简介Java中线程池的工作特点

    以实例简介Java中线程池的工作特点

    这篇文章主要介绍了以实例简介Java中线程池的工作特点,线程池是Java实现多线程编程的基础,需要的朋友可以参考下
    2015-09-09
  • 浅谈Spring中IOC的理解和认知

    浅谈Spring中IOC的理解和认知

    这篇文章主要介绍了浅谈Spring中IOC的理解和认知,想了解Spring的同学不要错过啊
    2021-04-04
  • Java Email邮件发送简单实现介绍

    Java Email邮件发送简单实现介绍

    电子邮件从用户电脑的邮件软件,例如Outlook,发送到邮件服务器上,可能经过若干个邮件服务器的中转,最终到达对方邮件服务器上,收件方就可以用软件接收邮件
    2022-11-11
  • java打jar包与找不到依赖包的问题

    java打jar包与找不到依赖包的问题

    这篇文章主要介绍了java打jar包与找不到依赖包的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01

最新评论