我想使用 application.properties
以便在另一个类的方法中传递它。问题是值总是返回 NULL
. 有什么问题吗?提前谢谢。 application.properties
filesystem.directory=temp
FileSystem.java
```
@Value("${filesystem.directory}")
private static String directory;
我想使用 application.properties
以便在另一个类的方法中传递它。问题是值总是返回 NULL
. 有什么问题吗?提前谢谢。 application.properties
filesystem.directory=temp
FileSystem.java
```
@Value("${filesystem.directory}")
private static String directory;
5条答案
按热度按时间rbpvctlc1#
对于在前面所有建议之后仍然面临问题的对象,请确保在构造bean之前没有访问该变量。
即:
而不是这样做:
请执行以下操作:
希望这能帮助别人避免浪费时间。
flmtquvp2#
spring在找到@value注解时使用依赖注入来填充特定的值。但是,不是将值传递给示例变量,而是传递给隐式setter。这个setter然后处理name\u静态值的填充。
3duebb1j3#
其他的答案可能是正确的。
然而,我遇到了同样的症状(
@Value
-添加注解的字段null
)但有一个不同的基本问题:import com.google.api.client.util.Value;
确保导入的是正确的@Value
注解类!特别是现在ide的便利性,这是一个非常容易犯的错误(我使用intellij,如果你自动导入太快而没有阅读你正在自动导入的内容,你可能会像我一样浪费几个小时)。当然,要导入的正确类是:
import org.springframework.beans.factory.annotation.Value;
tf7tbtn24#
除了@plog的答案之外,你没有什么需要交叉核对的。
static
变量不能被注入值。检查@plog的答案。确保用
@Component
或者@Service
组件扫描应该扫描用于注册bean的封装包。如果启用了xml配置,请检查xml。检查属性文件的路径是否正确或在类路径中。
dsekswqp5#
不能在静态变量上使用@value。您必须将其标记为非静态,或者在这里查看将值注入静态变量的方法:
https://www.mkyong.com/spring/spring-inject-a-value-into-static-variables/
编辑:以防将来链接中断。您可以通过为静态变量创建一个非静态setter来实现这一点:
这个类需要是一个springbean,否则它将不会被示例化,并且setter将不能被spring访问。