1 回答

TA貢獻1836條經(jīng)驗 獲得超4個贊
Spring 總是調(diào)用無參數(shù)構(gòu)造函數(shù)而不是初始化值。
當 Spring 發(fā)現(xiàn)該類有多個構(gòu)造函數(shù)時,它會去尋找一個無參數(shù)的構(gòu)造函數(shù)。如果 Spring 沒有找到它,它將拋出異常。
當 Spring 發(fā)現(xiàn)該類只有一個構(gòu)造函數(shù)時,它會接受它,而不管它有多少個參數(shù)。
我怎樣才能確保 spring 只調(diào)用所需的參數(shù)構(gòu)造函數(shù)?
唯一的方法是在類中只有一個構(gòu)造函數(shù)。使它在 Spring 中明確無誤。
作為旁注,
@ConstructorProperies({"id", "name"})
如果字段名稱對應(yīng)于 URL 參數(shù)名稱,則不需要。Spring 可以解決這個問題。public ImmutableObj() { this(null, null); }
這不是一個好主意。ImmutableObj.empty()
會更好。
作為獎勵,如果你想看看幕后發(fā)生了什么,這是我正在談?wù)摰钠?/p>
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);
}
}
}
添加回答
舉報