在Spring中将配置属性输入静态字段

2023/05/13

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
即可立即永久解锁本站全部文章