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

Java 如何在spring中为在xml中定义的bean选择构造函数?,java,xml,spring,spring-3,Java,Xml,Spring,Spring 3,我正在使用Spring3.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 A

我正在使用Spring3.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 +
                '}';
    }
}
我的SpringXML文件
alarm2.xml
如下所示

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

       <bean id="propertyRandom" abstract="true">
              <constructor-arg value="23" type="int"/>
       </bean>


       <bean id="alarm1" class="com.anshbansal.alarm2.Alarm" parent="propertyRandom">
              <constructor-arg value="10" type="int"/>
              <constructor-arg value="Ringing" />
       </bean>


</beans>
那么spring如何读取xml文件来解析调用哪个构造函数呢?首先是家长,然后是豆子?它在什么地方有记录吗

我知道有一些方法可以指定
索引
名称
作为属性,但我也应该知道如何处理这种不明确的情况。这就是我问这个问题的原因。

来自spring

构造函数参数解析匹配使用参数的 类型。如果的构造函数参数中不存在潜在的歧义 一个bean定义,然后是构造函数参数的顺序 在bean中定义的是这些参数的顺序 在创建bean时提供给相应的构造函数 实例化

我找到了下面的答案,它解释了选择构造函数时的spring行为

如果指定一个没有索引的构造函数arg,则最贪婪的 可以满足给定参数的构造函数将是 已调用(按类型匹配参数)。对于java.io.File, 这是文件(字符串父级,字符串子级)构造函数:您的字符串 参数按类型匹配,因此算法使用该构造函数

从父级继承时,将合并构造函数参数(与合并属性集合相同)。在您的例子中,合并之后,子bean构造函数参数将是

<constructor-arg value="23" type="int"/>
<constructor-arg value="10" type="int"/>
<constructor-arg value="Ringing" />

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

来自spring

构造函数参数解析匹配使用参数的 类型。如果的构造函数参数中不存在潜在的歧义 一个bean定义,然后是构造函数参数的顺序 在bean中定义的是这些参数的顺序 在创建bean时提供给相应的构造函数 实例化

我找到了下面的答案,它解释了选择构造函数时的spring行为

如果指定一个没有索引的构造函数arg,则最贪婪的 可以满足给定参数的构造函数将是 已调用(按类型匹配参数)。对于java.io.File, 这是文件(字符串父级,字符串子级)构造函数:您的字符串 参数按类型匹配,因此算法使用该构造函数

从父级继承时,将合并构造函数参数(与合并属性集合相同)。在您的例子中,合并之后,子bean构造函数参数将是

<constructor-arg value="23" type="int"/>
<constructor-arg value="10" type="int"/>
<constructor-arg value="Ringing" />

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

来自spring

构造函数参数解析匹配使用参数的 类型。如果的构造函数参数中不存在潜在的歧义 一个bean定义,然后是构造函数参数的顺序 在bean中定义的是这些参数的顺序 在创建bean时提供给相应的构造函数 实例化

我找到了下面的答案,它解释了选择构造函数时的spring行为

如果指定一个没有索引的构造函数arg,则最贪婪的 可以满足给定参数的构造函数将是 已调用(按类型匹配参数)。对于java.io.File, 这是文件(字符串父级,字符串子级)构造函数:您的字符串 参数按类型匹配,因此算法使用该构造函数

从父级继承时,将合并构造函数参数(与合并属性集合相同)。在您的例子中,合并之后,子bean构造函数参数将是

<constructor-arg value="23" type="int"/>
<constructor-arg value="10" type="int"/>
<constructor-arg value="Ringing" />

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

来自spring

构造函数参数解析匹配使用参数的 类型。如果的构造函数参数中不存在潜在的歧义 一个bean定义,然后是构造函数参数的顺序 在bean中定义的是这些参数的顺序 在创建bean时提供给相应的构造函数 实例化

我找到了下面的答案,它解释了选择构造函数时的spring行为

如果指定一个没有索引的构造函数arg,则最贪婪的 可以满足给定参数的构造函数将是 已调用(按类型匹配参数)。对于java.io.File, 这是文件(字符串父级,字符串子级)构造函数:您的字符串 参数按类型匹配,因此算法使用该构造函数

从父级继承时,将合并构造函数参数(与合并属性集合相同)。在您的例子中,合并之后,子bean构造函数参数将是

<constructor-arg value="23" type="int"/>
<constructor-arg value="10" type="int"/>
<constructor-arg value="Ringing" />


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

这并不能解释如何将父级的特定
int
分配给卷而不是小时。你能解释一下吗?修改了答案,提到Merging谢谢你提供的信息。你是怎么找到这些信息的?看看代码。spring源代码在github上。这并不能解释父级的特定
int
是如何分配给volume而不是hour的。你能解释一下吗?修改了答案,提到Merging谢谢你提供的信息。你是怎么找到这些信息的?看看代码。spring源代码在github上,这并不能解释特定的
int
o