我创建了一个简单的SpringBoot应用程序,使用"http://start.spring.io"春天Initializr。我使用的是JDK 8和Spring 2.6.6。
我在IntelliJ中打开了一个应用程序,并能够构建它并运行它。我还添加了application.properties"作为资源,我定义了一个属性:
application.baseurl=/responsiblityViewer/api
in my DemoApplication.java:
public class DemoApplication {
@Value("${application.baseurl}")
public static String baseUrl;
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
System.out.println("Test Application baseUrl : " + baseUrl);
}
}
输出为NULL。
我也尝试使用"application.yml"这里我定义了:
application:
baseurl: /responsiblityViewer/api
仍然"application.baseurl"不是注射。我哪里做错了?
这里有很多要剖析的。
首先,你不能将值注入到静态属性中。
其次,您将无法从静态主方法中引用该属性,因为bean尚未构造。
如果你仔细阅读spring bean的生命周期,它会帮助你理解这一点,注入发生在实例化之后。
如果您将变量定义更改为
,则可以观察到此行为public String baseUrl;
并添加这个方法
@PostConstruct
public void printIt() {
log.debug(baseUrl);
}