spring 如何将配置信息注入静态变量的方法

我们学习过将配置信息,通过@Value()的方法注入到对象的变量。这是由于对象是由spring来托管的。那么非spring如果,我们需要在静态方法中,使用配置文件中的值,又该怎么做呢?

传统的错误作法

application.properties

spring.redis.host=test
@Component
public class RedisServiceImpl implements RedisService {
  ...
  @Value("${spring.redis.host}")
  static public String host;

  @Value("${spring.redis.port}")
  static public Integer port;
  ...

   static public JedisPool getJedisPool() {
    if (RedisServiceImpl.host == null) {
      logger.info("host 未注入");
    }
  }

控制台打印为: "host 未注入

正确的方法

@Component
public class RedisServiceImpl implements RedisService {
  ...
  static public String host;
  static public Integer port;

    @Value("${spring.redis.host}")
  public void setHost(String host) {
    RedisServiceImpl.host = host;
  }

  @Value("${spring.redis.port}")
  public void setPort(Integer port) {
    RedisServiceImpl.port = port;
  }
  ...

   static public JedisPool getJedisPool() {
    if (RedisServiceImpl.host == null) {
      logger.info("host 未注入");
    } else {
      logger.info("host 值为" + RedisServiceImpl.host);
    }
  }

控制台正确的打印了注入的值。

原因猜想

spring进行组件扫描,遇到@Component时,初始化对象 RedisServiceImpl, 初始化过程中,扫描到@Value注解,将值注入给方法。

接着,方法将值传给了RedisServiceImpl类,故RedisServiceImpl有值 -- 正解。

如果将@Value(),直接加到静态私有变量上,则在初始化对象时,由于静态私有变量属于类,所以spring未对类进行操作 -- 错误。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Spring不能注入Static变量的原因及Spring注入静态变量

    下面给大家介绍spring不能注入static变量的原因,具体详情如下所示: Spring 依赖注入 是依赖 set方法 set方法是 是普通的对象方法 static变量是类的属性 @Autowired private static JdbcTemplate jdbcTemplate; 单纯看这个注入过程是没有报错的,但是在接下来的jdbcTemplate.query()会报空指针错误. ps:Spring注入静态变量 今天碰到一个问题,我的一个工具类提供了几种静态方法,静态方法需要另外一个类的

  • spring boot静态变量注入配置文件详解

    本文实例为大家分享了spring boot静态变量注入配置文件的具体代码,供大家参考,具体内容如下 spring 静态变量注入 spring 中不支持直接进行静态变量值的注入,我们看一下代码: @Component(value = "KafkaConfig") @ConfigurationProperties(prefix = "baseConfig") public class KafkaConfig { private static String logBrok

  • spring 如何将配置信息注入静态变量的方法

    我们学习过将配置信息,通过@Value()的方法注入到对象的变量.这是由于对象是由spring来托管的.那么非spring如果,我们需要在静态方法中,使用配置文件中的值,又该怎么做呢? 传统的错误作法 application.properties spring.redis.host=test @Component public class RedisServiceImpl implements RedisService { ... @Value("${spring.redis.host}&quo

  • Spring Boot使用Value注解给静态变量赋值的方法

    昨天在使用@Value注解给静态变量赋值的时候,发现静态变量的值始终是null.后来搜索一下得知其中原因,Spring Boot 不允许/不支持把值注入到静态变量中.但是我们可以变通一下解决这个问题.因为Spring Boot 支持set方法注入,我们可以利用非静态set方法注入静态变量.废话不多说,贴上我昨天写的代码: @Component public class CoverImageUtil { private static String endpoint; private static

  • Spring Cloud 动态刷新配置信息教程详解

    有时候在配置中心有些参数是需要修改的,这时候如何不重启而达到实时生效的效果呢? 添加依赖 <dependencies> ... <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> ... </dependencies>

  • python类和函数中使用静态变量的方法

    本文实例讲述了python类和函数中使用静态变量的方法.分享给大家供大家参考.具体分析如下: 在python的类和函数(包括λ方法)中使用静态变量似乎是件不可能[Nothing is impossible]的事, 但总有解决的办法,下面通过实现一个类或函数的累加器来介绍一些较为非主流的方法 方法一.通过类的__init__和__call__方法 class foo: def __init__(self, n=0): self.n = n def __call__(self, i): self.n

  • Python使用函数默认值实现函数静态变量的方法

    本文实例展示了Python使用函数默认值实现函数静态变量的方法,具体方法如下: 一.Python函数默认值 Python函数默认值的使用可以在函数调用时写代码提供方便,很多时候我们只要使用默认值就可以了. 所以函数默认值在python中用到的很多,尤其是在类中间,类的初始化函数中一帮都会用到默认值. 使用类时能够方便的创建类,而不需要传递一堆参数. 只要在函数参数名后面加上 "=defalut_value",函数默认值就定义好了.有一个地方需要注意的是,有默认值的参数必须在函数参数列表

  • Spring boot将配置属性注入到bean类中

    一.@ConfigurationProperties注解的使用 看配置文件,我的是yaml格式的配置: // file application.yml my: servers: - dev.bar.com - foo.bar.com - jiaobuchong.com 下面我要将上面的配置属性注入到一个Java Bean类中,看码: import org.springframework.boot.context.properties.ConfigurationProperties; import

  • 配置C#的系统环境变量的方法

    在使用任何 .NET SDK 命令行工具(包括 C# 编译器)之前,需要配置开发计算机以识别它们的存在.最简单的方法是使用 Start | All Programs | Visual Studio 2005 | Visual Studio Tools 菜单选项,启动预配置的 Visual Studio 命令提示.这一特定的控制台能够自动初始化必要的环境变量,而无须您执行任何操作.(Visual Studio .NET 2003 用户需要启动他们各自的命令提示). 注 如果您没有 Visual S

  • 因Spring AOP导致@Autowired依赖注入失败的解决方法

    发现问题: 之前用springAOP做了个操作日志记录,这次在往其他类上使用的时候,service一直注入失败,找了网上好多内容,发现大家都有类似的情况出现,但是又和自己的情况不太符合.后来总结自己的情况发现:方法为private修饰的,在AOP适配的时候会导致service注入失败,并且同一个service在其他的public方法中就没有这种情况,十分诡异. 解决过程: 结合查阅的资料进行了分析:在org.springframework.aop.support.AopUtils中: publi

随机推荐