Я работаю с Spring 3.1.0. Я пытаюсь понять, как весна читает свои xml-файлы. Я пытаюсь понять, как весна занимается неопределенными условиями в определениях бобов.Как конструктор выбирается весной для beans, определенных в xml с родителем?
Например
У меня есть 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 +
'}';
}
}
Моя весна XML файл 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>
Существует неясность, поскольку это не сразу понятно, какие int
войдет в объем и который войдет в час. Если я печатаю, получаю следующее:
Alarm{type='Ringing', volume=23, hour=10}
Так как весна читает xml-файл, чтобы разрешить, какой конструктор вызвать? Сначала родитель, потом боб? Это где-то задокументировано?
Я знаю, что существуют способы, как указать index
и name
в качестве атрибутов, но я также должен знать, как справляться с такими неоднозначными условиями. Вот почему я спрашиваю об этом.
Это не объясняет, как конкретный «int» родителя был назначен тому, а не часу. Не могли бы вы объяснить? –
Пересмотрены ответ, чтобы упомянуть о слиянии –
Спасибо за информацию.Как вы находите эту информацию? –