当存在多个构造函数时,使用autowire ="constructor"进行依赖注入?

 蔡佩琬62777 发布于 2023-01-26 02:30

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

 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它不知道需要调用哪个构造函数?

1 个回答
  • 这是Spring自动构建器的结果.

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

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

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

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

    2023-01-26 07:36 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有