如何在spring中为xml中定义的bean选择构造函数?

我正在使用Spring 3.1.0。 我试图了解spring读取其xml文件的方式。 我试图理解spring如何处理bean定义中的模糊条件。

例如

我有Alarm.java

 package com.anshbansal.alarm2; public class Alarm { private String type; private int volume; private int hour; public Alarm() { } public Alarm(String type, int volume, int hour) { this.type = type; this.volume = volume; this.hour = hour; } public Alarm(String type, int volume) { this.type = type; this.volume = volume; } public Alarm(int volume, String type) { this.type = type; this.volume = volume; } public void setType(String type) { this.type = type; } public void setVolume(int volume) { this.volume = volume; } public void setHour(int hour) { this.hour = hour; } @Override public String toString() { return "Alarm{" + "type='" + type + '\'' + ", volume=" + volume + ", hour=" + hour + '}'; } } 

我的spring xml文件alarm2.xml如下。

           

存在歧义,因为不能立即清楚哪个int将进入音量,哪个将进入小时。 如果我打印我得到以下

 Alarm{type='Ringing', volume=23, hour=10} 

那么spring如何读取xml文件以解析要调用的构造函数? 父母先,然后豆? 它是在某处记录的吗?

我知道有一些方法可以指定indexname作为属性,但我也应该知道如何处理这种模糊的条件。 这就是我问这个的原因。

从春季文档 ,

使用参数的类型进行构造函数参数解析匹配。 如果bean定义的构造函数参数中不存在潜在的歧义,那么在bean定义中定义构造函数参数的顺序是在实例化bean时将这些参数提供给适当的构造函数的顺序。

我找到了以下答案,解释了选择构造函数时的弹簧行为。

如果指定不带索引的constructor-arg,则将调用可以满足给定参数的最贪婪构造函数(按类型匹配参数)。 对于java.io.File,这是File(String parent,String child)构造函数:您的String参数按类型匹配,因此算法使用该构造函数。

参考文献1 参考2

从父级inheritance时,构造函数参数将被合并(与合并属性集合相同)。 在您的情况下,合并后的子bean构造函数参数将是

    

对于不明确的场景,请使用索引或构造函数参数名称。