1 回答

TA貢獻1836條經驗 獲得超4個贊
Spring 總是調用無參數構造函數而不是初始化值。
當 Spring 發現該類有多個構造函數時,它會去尋找一個無參數的構造函數。如果 Spring 沒有找到它,它將拋出異常。
當 Spring 發現該類只有一個構造函數時,它會接受它,而不管它有多少個參數。
我怎樣才能確保 spring 只調用所需的參數構造函數?
唯一的方法是在類中只有一個構造函數。使它在 Spring 中明確無誤。
作為旁注,
@ConstructorProperies({"id", "name"})
如果字段名稱對應于 URL 參數名稱,則不需要。Spring 可以解決這個問題。public ImmutableObj() { this(null, null); }
這不是一個好主意。ImmutableObj.empty()
會更好。
作為獎勵,如果你想看看幕后發生了什么,這是我正在談論的片段
if (ctor == null) {
Constructor<?>[] ctors = clazz.getConstructors();
if (ctors.length == 1) {
ctor = ctors[0];
} else {
try {
ctor = clazz.getDeclaredConstructor();
} catch (NoSuchMethodException var10) {
throw new IllegalStateException("No primary or default constructor found for " + clazz, var10);
}
}
}
添加回答
舉報