Java 属性和环境始终为空
我很难从属性文件加载属性。我正在尝试将属性加载到下面列出的配置类中Java 属性和环境始终为空,java,spring,Java,Spring,我很难从属性文件加载属性。我正在尝试将属性加载到下面列出的配置类中 package dk.fitfit.budget.config; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; imp
package dk.fitfit.budget.config;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
import org.springframework.core.env.Environment;
@Configuration
@PropertySource("classpath:application.properties")
public class ApplicationConfig {
private static final Logger logger = LoggerFactory.getLogger(ApplicationConfig.class);
@Autowired
private Environment env;
@Value("${snot:test}")
private String snot;
public ApplicationConfig() {
logger.info("Application config loaded!"); // Displays as expected
logger.info("snot: {}", snot); // snot: null
logger.info("env: {}", env); // env: null
}
@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
}
如果我更改文件名(application.properties)或“@PropertySource(“classpath:application.properties”)”,我会得到一个关于文件不存在的错误。很明显,它正在加载(无论如何,在某种程度上)
我至少希望看到默认字符串“test”被注入变量snot中。但即使这样也做不到。我也无法自动连接环境。。。不确定是否有关系
my application.properties的内容如下所示
snot=snog
我的application.properties文件位于src/main/resources/中
有人知道我做错了什么吗?构造函数的目的是初始化类实例。您必须先构造并初始化类实例,然后Spring才能对其执行任何操作。因此,您不能期望
env
和snot
字段在构造函数中除了默认的null
值之外还有任何内容。Spring(以及所有依赖项注入工具)在使用new
创建实例之前不能注入字段,这就是为什么构造器注入应该优先于现场注入的原因之一。通常,您可以对构造函数参数使用@Value
,但是@Configuration
类存在某些问题,使得构造函数注入不切实际
然而,有一种解决方案正好适合这种情况:@PostConstruct
。在DI框架对bean完成了所有魔术之后,将调用此方法:
@PostConstruct
public void log() {
logger.info("Application config loaded!"); // Displays as expected
logger.info("snot: {}", snot); // snot: null
logger.info("env: {}", env); // env: null
}