我有下面的构造函数的文本编辑器类
public class TextEditor { private SpellChecker spellChecker; private SpellChecker1 spellChecker1; private SpellChecker2 spellChecker2; public TextEditor(SpellChecker spellChecker) { this.spellChecker = spellChecker; } public TextEditor(SpellChecker2 spellChecker2) { this.spellChecker2 = spellChecker2; } public TextEditor(SpellChecker spellChecker, SpellChecker1 spellChecker1,SpellChecker2 spellChecker2) { this.spellChecker = spellChecker; this.spellChecker1 = spellChecker1; this.spellChecker2 = spellChecker2; } public TextEditor(SpellChecker spellChecker, SpellChecker1 spellChecker1) { this.spellChecker = spellChecker; this.spellChecker1 = spellChecker1; } }
在春天豆我有
我观察到的是具有两个参数的构造函数被一致地调用.是随机的吗?不应该抛出异常becoz它不知道需要调用哪个构造函数?
这是Spring自动构建器的结果.
它做的第一件事就是获取所有bean类的构造函数并对它们进行排序,首先将公共构造函数放入减少的参数数量,然后再将所有非公共构造函数放入参数数量减少的情况.这些是候选构造函数.
然后它遍历这些候选者,试图从中生成参数BeanFactory
.如果它不能因为bean丢失或出于其他原因,它会跳过候选者.如果它成功找到参数,它会根据许多因素(参数列表长度,参数类型与参数的接近程度等等)为当前候选构造函数提供权重.然后检查前一个候选人的体重,如果一个人比另一个人好,则交换他们.
如果在此过程结束时有候选构造函数,Spring将使用它.
如果你说Spring在你的3 arg构造函数中使用你的2 arg构造函数,那么这意味着你的3 arg构造函数中没有一个类型的bean.