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);
}
}
}
添加回答
举报