【发布时间】:2014-02-20 11:27:02
【问题描述】:
我有带有以下构造函数的文本编辑器类
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;
}
}
在春豆里我有
<bean id="textEditor" class="com.TextEditor" autowire="constructor">
</bean>
我观察到的是具有两个参数的构造函数被一致地调用。是随机的吗?不应该 spring 抛出异常,因为它不知道需要调用哪个构造函数?
【问题讨论】:
-
为什么它不知道需要调用哪个构造函数。它根据可用的构造函数确定要注入的类型,在上下文中检查哪个构造函数最能满足并执行该构造函数。
-
那为什么不调用带有 3 个参数的构造函数呢?
-
有
SpellChecker2类型的bean 可用吗?没有完整的画面,很难说。 -
正如你所说的“spring会在上下文中检查哪个构造函数最多可以满足”。您的意思是说将调用具有最大参数数量的构造函数?
-
@MSach 正如@MDeinum 所暗示的那样,如果您发布了整个 spring-beans xml 文件,它将对读者有所帮助。 @MDeinum 建议您的 spring-beans 文件中有
SpellChecker和SpellChecker1类型的 bean,但没有SpellChecker2。