1. 概述
在本教程中,我们介绍如何使用Spring将Java属性文件中的值注入到静态字段。
2. 问题描述
首先,假设我们的属性文件中有以下属性定义:
# application.properties
name=Inject a value to a static field
之后,我们希望将它的值注入到一个实例变量中。
这通常可以通过在实例字段上使用@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}")
private String name;
@Value("${name}")
public void setNameStatic(String name) {
PropertyController.NAME_STATIC = name;
}
}
在上面的代码中,首先,PropertyController是一个RestController,由Spring初始化。
之后,Spring搜索带有@Value注解的字段和方法。
Spring在找到@Value注解时使用依赖注入来填充特定值,但是,不是将值直接传递给实例变量,而是将其隐式传递给setter方法。 然后这个setter方法处理我们的NAME_STATIC值的填充。
当我们访问/properties端点时,可以看到NAME_STATIC和name正确注入属性。
4. 总结
在这个教程中,我们了解了如何将属性文件中的值注入到静态变量中。
与往常一样,本教程的完整源代码可在GitHub上获得。
Show Disqus Comments
Post Directory
扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章