gpt4 book ai didi

java - 静态 block 不适用于 Spring 中的@Value

转载 作者:搜寻专家 更新时间:2023-11-01 02:23:04 24 4
gpt4 key购买 nike

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

我希望所有这些变量在 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());
}

最佳答案

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

编辑:(添加示例)

@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());
}

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

此处有更多示例:http://www.journaldev.com/2637/spring-bean-life-cycle-methods-initializingbean-disposablebean-postconstruct-predestroy-aware-interfaces

关于java - 静态 block 不适用于 Spring 中的@Value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33814346/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com