Java 静态配置对象的Spring autowire失败
作为一名Spring新手,我尝试将外部配置加载到配置对象中,然后尝试自动连线Java 静态配置对象的Spring autowire失败,java,spring,spring-boot,dependency-injection,static,Java,Spring,Spring Boot,Dependency Injection,Static,作为一名Spring新手,我尝试将外部配置加载到配置对象中,然后尝试自动连线 @Autowired public static ConfigProperties config; 以下是我的设置分解为最小值(aso字段较少): 包结构: app |--Application.java app.configuration |--ConfigProperties.java 我的configuration.properties位于: src/main/resources/config Ap
@Autowired
public static ConfigProperties config;
以下是我的设置分解为最小值(aso字段较少):
包结构:
app
|--Application.java
app.configuration
|--ConfigProperties.java
我的configuration.properties位于:
src/main/resources/config
Application.java:
package app;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import app.configuration.ConfigProperties;
@SpringBootApplication
public class Application
{
//just to test if autowire works
@Autowired
public static ConfigProperties config;
public static void main(String[] args)
{
SpringApplication.run(Application.class, args);
System.out.println(config.getId());
}
}
ConfigProperties.java:
package app.configuration;
import javax.validation.constraints.NotBlank;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.validation.annotation.Validated;
@Configuration
@PropertySource("classpath:/config/configuration.properties")
@ConfigurationProperties
@Validated
public class ConfigProperties
{
@NotBlank
private String id;
public String getId()
{
return id;
}
public void setId(String id)
{
this.id = id;
}
}
这将导致该行出现NullPointerException:
System.out.println(config.getId());
在aplication.java中
我读了几篇关于这个主题的文章,但大多数都暗示自己的实例化阻止了自动连接,我没有这样做,或者扫描无法找到要自动连接的类,但从我阅读的注释和包结构来看,这不应该是问题所在
我的错误在哪里
PS:似乎从属性文件中正确读取了属性。如果我测试验证,如果忽略我尝试自动连线的部分,则会为Null值抛出预期错误
@Autowired
public static ConfigProperties config;
无法在Spring中自动关联静态字段
//只是为了测试autowire是否工作
您可以为此编写一个新的Junit
测试用例
比如:
@Autowired
public ConfigProperties config;
在你的测试课上
无法在Spring中自动关联静态字段
//只是为了测试autowire是否工作
您可以为此编写一个新的Junit
测试用例
比如:
@Autowired
public ConfigProperties config;
在测试类中。不要使用静态配置属性。然后使用@PostConstruct
从配置对象打印ID
@Autowired
ConfigProperties config;
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@PostConstruct
void printId(){
System.out.println("ID = " + config.getId());
}
不要使用静态配置属性。然后使用@PostConstruct
从配置对象打印ID
@Autowired
ConfigProperties config;
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@PostConstruct
void printId(){
System.out.println("ID = " + config.getId());
}
由于注释@Autowired
需要getter/setter来注入正确的实现,因此我不建议您连接静态内容。但是,此问题有一个解决方法:
public static ConfigProperties config;
@Autowired
public Application(ConfigProperties config) {
Application.config= config;
}
或者,看看@PostConstruct
注释。由于注释@Autowired
需要getter/setter来注入正确的实现,因此我不建议您连接静态内容。但是,此问题有一个解决方法:
public static ConfigProperties config;
@Autowired
public Application(ConfigProperties config) {
Application.config= config;
}
或者,看看@PostConstruct
注释。我不知道;谢谢你的快速回复。assertNotNull测试似乎通过了。我不知道这一点;谢谢你的快速回复。assertNotNull测试似乎已通过。