Java使用@Value获取不到值

场景: 工具类单例模式,实例化时根据不同环境从.properties或.yml中动态取值

问题解析: Java 中 static/final 修饰的变量,通过 @Value 是获取不到值的

解决方案:

  1. 在变量 setter方法上使用 @Value
package com.xx.utils.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class AConfig {
    public static String url;
    
    public static String appkey;
    
    @Value("${xxx.url}")
    public void setUrl(String url) {
        AConfig.url = url;
    }
    
    @Value("${xxx.appkey}")
    public void setAppkey(String appkey) {
        AConfig.appkey = appkey;
    }
}
  1. 中间非静态变量赋值
package com.xx.utils.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class AConfig {
    public static String url;
    
    @Value("${xxx.url}")
    private String url1;
    
    public static String appkey;
    
    @Value("${xxx.appkey}")
    private String appkey1;
    
    @PostConstruct
    public void init() {
        url = url1;
        appkey = appkey1;
    }
}

总结: 两种解决方案都是间接的通过非 static 的变量获取到值,从而拿到配置文件中的值;但两种方法中都需要在类上加上@Component。


版权声明:本文为qq_15031941原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。