我正在嘗試使用 Spring Configuration 類為我的專案設定配置。我創建了一個新的試用專案,因為我不想編輯我的原始專案(對不起所有這些廢話,但如果用戶是新用戶,系統似乎不會原諒幾乎所有代碼發布)
演示應用程式.java:
package com.example.demo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DemoApplication {
@Autowired
public static Config configuration;
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
String fullname = configuration.name " " configuration.surname " " configuration.age;
System.out.println(fullname);
}
}
配置.java:
package com.example.demo;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
@Configuration
@PropertySource("classpath:application.yml")
public class Config {
@Value("${person.name}")
public String name;
@Value("${person.surname}")
public String surname;
@Value("${person.age}")
public Integer age;
}
應用程式.yml:
person:
name: name1
surname: surname1
age: 25
例外:
Exception in thread "restartedMain" java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49)
Caused by: java.lang.NullPointerException
at com.example.demo.DemoApplication.main(DemoApplication.java:15)
... 5 more
我做錯了什么?
uj5u.com熱心網友回復:
這就是問題所在
@Autowired
public ---> static <---- Config configuration;
Spring 不能自動裝配static
欄位。您需要從自動裝配欄位中洗掉靜態
然后您將無法在main
方法中使用此欄位,因為main
它被宣告為靜態。這里的解決方案如下。您需要在以編程方式加載應用程式背景關系后檢索 bean,而不使用@Autowired
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
ConfigurableApplicationContext ctx = SpringApplication.run(DemoApplication.class, args);
Config configuration = ctx.getBean(Config.class);
String fullname = configuration.name " " configuration.surname " " configuration.age;
System.out.println(fullname);
}
}
uj5u.com熱心網友回復:
Config物件是靜態的,所以一開始會被創建,Spring容器接管物件的創建已經來不及了。
uj5u.com熱心網友回復:
你得到空指標例外的原因,你不能像那樣初始化spring。您的靜態變數未初始化。
我的建議:
package com.example.demo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DemoApplication implements ApplicationRunner{
@Autowired
private Config configuration;
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@Override
public void run(ApplicationArguments args) {
String fullname = configuration.name " " configuration.surname " " configuration.age;
System.out.println(fullname);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/481305.html