1 回答

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