Java 静态块不适用于弹簧中的@Value

Java 静态块不适用于弹簧中的@Value,java,spring,spring-mvc,Java,Spring,Spring Mvc,我需要在以下问题上寻求帮助。我正在从属性文件中读取一些属性,并将更改/最终值分配给其他变量。我在将静态{}块更改为普通块或在构造函数中遇到困难 我希望所有这些变量在web应用程序加载/部署时从.properties文件中获取赋值。有什么帮助吗 private static String username; private static String password; private static String dbURL; private static String dbPort; priva

我需要在以下问题上寻求帮助。我正在从属性文件中读取一些属性,并将更改/最终值分配给其他变量。我在将静态{}块更改为普通块或在构造函数中遇到困难

我希望所有这些变量在web应用程序加载/部署时从.properties文件中获取赋值。有什么帮助吗

private static String username;
private static String password;
private static String dbURL;
private static String dbPort;
private static String filePath;
private static File localFile;
private static File remoteFile;


@Value("${local.file.name}")
private String localFileName;

@Value("${remote.file.name"})
private String remoteFileName;

    static {
        File finalFilePath = new File(filePath);
        if (!finalFilePath.exists() && !finalFilePath.isDirectory()) {
            finalFilePath.mkdirs();
        }
        localFile = new File(StringBuffer(finalFilePath).append("/").append("localFileName").toString());
        remoteFile = new File(StringBuffer(finalFilePath).append("/").append("remoteFileName").toString());
    }

检查属性文件是否在类路径中,以及您的类是否被注释为Spring组件

您可以实现用
@PostConstruct
注释的方法(或者实现
初始化bean
和实现
afterPropertiesSet
)并在那里设置值。Spring将在应用程序加载时bean初始化后调用此方法。

这永远不会起作用。
静态
块执行发生在spring生命周期之前。创建实例后,Spring将注入这些属性值(
@Value
),因此,正如jny所说,例如,您需要使用@PostConstructor(或Spring为初始化提供的任何其他选项),而不是静态块初始化

编辑:(添加一个示例)

因此,在初始化之后,我已经准备好在这个bean中使用
localFile
remoteFile
变量


这里有更多的例子:

这些属性属于哪一类(spring托管bean?、组件、服务、存储库、配置)?这样行吗?(通过调试后构造注释方法中的某些语句进行测试)请不要使用StringBuffer,因为它在十多年前被StringBuilder取代。在这种情况下,使用
+
将更高效,更易于阅读。谢谢您的建议。你能提供同样的样品项目吗?谢谢,Sayali
@Value("${local.file.name}")
private String localFileName;

@Value("${remote.file.name"})
private String remoteFileName;


@PostConstruct 
public void setup() {
        File finalFilePath = new File(filePath); // assume filePath is already injected
        if (!finalFilePath.exists() && !finalFilePath.isDirectory()) {
            finalFilePath.mkdirs();
        }
        localFile = new File(StringBuffer(finalFilePath).append("/").append("localFileName").toString());
        remoteFile = new File(StringBuffer(finalFilePath).append("/").append("remoteFileName").toString());
}