@ Spring引导中的值不起作用。它是从环境对象加载的,而不是从字段注入加载的

问题描述 投票:0回答:2

application.properties中有环境属性

application.properties

app.mail.allowedDomains=gmail

课堂上

@Autowired
private Environment env;

@Value("${app.mail.allowedDomains}")
private static String allowedDomainsForMail;

@Value("${app.mail.allowedDomains:nothing}")
private static String allowedDomainsForMail2;

public void printProperties() {
    System.out.println("Inside impl");
    System.out.println("@Value:\t" + allowedDomainsForMail);
    System.out.println("@Value:\t" + allowedDomainsForMail2);
    System.out.println("Env:\t" + env.getProperty("app.mail.allowedDomains"));
}

输出

内部展示

@Value: null
@Value: null
Env:    gmail

在第二种情况下甚至都没有设置“ nothing”(如果未找到,则为默认值)。但是从env开始打印

我什至在包的主类中尝试使用@ConfigurationProperties。

没有成功。

在每次匹配或应用加载时,是否仅从环境文件中获取值才能加载?

来自org.springframework.beans.factory.annotation.Value的值

java spring-boot properties-file
2个回答
1
投票

Spring不允许注入静态字段。总的来说,这不是一个好习惯。下面的一些链接可能会帮助您了解原因。

link#1link#2

除去静电,并且应该注入,因为注入了env Environment


1
投票

Spring不支持静态场注入。另外@Value注释也不是最佳实践。

最佳方法是使用@ConfigurationProperties批注并将其与应用程序属性绑定。这将帮助您在单元测试中模拟Configration Bean,而不是对@Value注入使用反射]

© www.soinside.com 2019 - 2024. All rights reserved.