静态函数中@Value注释的替代方法

San*_*Lee 7 java spring static annotations

不可能@Value在静态变量上使用.

@Value("${some.value}")
static private int someValue;

static public void useValue() {
    System.out.println(someValue);
}
Run Code Online (Sandbox Code Playgroud)

当我这样做时,0打印出来.那么什么是这个的好选择呢?

Ral*_*lph 10

Spring在静态字段中注入注释(默认情况下).

所以你有两个选择:

  • (更好的一个)使场非静态
  • (丑陋的黑客)添加一个无静态的setter,它在静态字段中写入,并将@Value注释添加到setter.


mem*_*und 6

使用以下简单技巧即可实现所需的功能(比将值注入非静态设置器并编写一个静态字段更好-如接受的答案中所建议):

@Service
public class ConfigUtil {
    public static ConfigUtil INSTANCE;

    @Value("${some.value})
    private String value;

    @PostConstruct
    public void init() {
        INSTANCE = this;        
    }

    public String getValue() {
        return value;
    }
}
Run Code Online (Sandbox Code Playgroud)

使用方式如下:

ConfigUtil.INSTANCE.getValue();