当前位置: 首页 > 编程笔记 >

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

钦枫
2023-03-14
本文向大家介绍spring 如何将配置信息注入静态变量的方法,包括了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未对类进行操作 -- 错误。

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

 类似资料:
  • 问题内容: 我是Spring的新手,遇到了这个问题。我尝试在该方法上使用@Autowired,但没有成功,在变量上,我从Eclipse中收到错误消息“该位置不允许使用@Autowired注解”。我在xml中创建了所需的bean。 下面是代码,此方法在抽象类内。 (ps我是stackOverflow的新手,希望我正确格式化了问题:)) 问题答案: 如果有可能可以让你把和成静态属性可以通过利用注入他们

  • 问题内容: 设置环境变量后,AWS 在http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_Java.managing.html中讨论 。一切都很好,除了我不能在我的Spring XML配置代码中调用,也不能调用资源束快捷方式,因为资源束本身必须以某种方式提取这些环境变量来为它们服务。您能帮我将这个示例配置转换为使用

  • 问题内容: 我正在使用Spring MVC。我有一个带有很多静态变量的注释类。我想使用application.properties文件中的值实例化它们。 例如在中,我有: 然后在课堂上是: 我得到了 我也尝试过 接着: 它给出了相同的错误。 问题答案: 你不必在静态字段中保留任何属性。 你不知道何时修改此静态字段 你不知道哪个线程修改了它的价值 任何时候任何线程都可以更改此静态字段的值,并且你被拧

  • 如何以编程方式将Java CDI 1.1托管bean注入静态方法中的局部变量?

  • 问题说明 假如我们有个『CDN 域名』的变量,在 Laravel 中有以下几种方法: 硬代码,直接写死。- ❌ 可维护性低 写死在 config/app.php 文件中。 - ❌ 无法区分环境进行配置 存储于 .env 文件中,使用 env() 方法直接读取。 - ❌ 虽然解决了环境变量问题但是不推荐 存储在 .env 和 config/app.php 文件中,然后使用 config() 函数来读

  • 问题内容: 在我的一个班级中,有一个成员,我需要在!中设置该值 !也就是说,我们是否可以为此静态属性注入一个值? 问题答案: 是的,此链接上有一个示例http://planproof-fool.blogspot.com/2010/03/spring-setting-static- fields.html