前段時間使用 Spring Boot
在開發一個需求,要求將一些參數做成可配置化的,於是順理成章地將參數放入 application.properties
文件中。
YD.APP_ID=app20
要獲取 application.properties
中的屬性值,最簡單的方式是使用 @Value
註解
@Value("${YD.APP_ID}")
private String appId;
這個時候我有一個類 App,它有一個構造方法會初始化一些東西,並使用到 appId
這個屬性值
@Repository
public class App{
@Value("${YD.APP_ID}")
private String appId;
public App(){
// ...init
print(appId);
}
}
這裏會打印 appId
的值爲 null
,原因是屬性注入發生在構造方法之後。
這種問題其實很困擾人的,如果你對 Java 的類加載機制和創建對象過程比較熟悉的,可能很快就能明白原因在那裏。