java多个构造方法同时使用_java – 当存在多个构造函数时,使用autowire =“constructor”进行依赖注入?...

本文讨论了在Spring框架中,当一个类存在多个构造函数时,如何进行依赖注入。Spring会首先对构造函数进行排序,优先考虑参数少的公共构造函数,然后尝试从BeanFactory获取参数来匹配。如果找到合适的参数,会根据权重选择构造函数。如果在过程中发现多个构造函数都能匹配,但参数类型或数量不同,Spring可能会选择参数较少的构造函数,这可能是导致2个参数构造函数被选中的原因。
摘要由CSDN通过智能技术生成

我有下面的构造函数的文本编辑器类

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;

}

}

在春天豆我有

我观察到的是具有两个参数的构造函数被一致地调用.是随机的吗?不应该

spring throw exception becoz它不知道需要调用哪个构造函数?

解决方法:

这是Spring自动构建器的结果.

它做的第一件事就是获取所有bean类的构造函数并对它们进行排序,首先将公共构造函数放入减少的参数数量,然后再将所有非公共构造函数放入参数数量减少的情况.这些是候选构造函数.

然后迭代遍历这些候选者,尝试从BeanFactory生成参数.如果它不能因为bean丢失或出于其他原因,它会跳过候选者.如果它成功找到参数,它会根据许多因素(参数列表长度,参数类型与参数的接近程度等等)为当前候选构造函数提供权重.然后检查前一个候选人的体重,如果一个人比另一个人好,则交换他们.

如果在此过程结束时有候选构造函数,Spring将使用它.

如果你说Spring在你的3 arg构造函数中使用你的2 arg构造函数,那么这意味着你的3 arg构造函数中没有一个类型的bean.

标签:java,spring

来源: https://codeday.me/bug/20190528/1174890.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值