1.介绍
如何使用 Spring 将值从 Java 属性文件注入到静态字段。
2.问题
application.proerties中添加了自定义属性
name=注入静态字段
将值注入到一个实例变量中。
通常可以通过在实例字段上使用 @Value 注释来完成:
@Value("${name}")
private String name;
但是,将其应用于静态字段时,值会是 null:
@Value("${name}")
private static String NAME_NULL;
因为 Spring 不支持静态字段上的 @Value。
3.解决
首先,声明要注入 NAME_STATIC 的静态变量。
之后,将创建一个名为 setNameStatic 的 setter 方法并使用 @Value 注释对其进行注释:
@RestController
public class PropertyController {
private static String NAME_STATIC;
@Value("${name}")
public void setNameStatic(String name){
PropertyController.NAME_STATIC = name;
}
}
PropertyController,它是一个 RestController,正在被 Spring 初始化。
Spring 会搜索 Value 注解的字段和方法。
Spring 使用依赖注入在找到 @Value 注解时填充特定值。 但是,它不是将值传递给实例变量,而是传递给隐式 setter。 然后这个 setter 处理我们的 NAME_STATIC 值的填充。