2014-12-02 18 views
0

저는 Spring 3.1.0과 함께 일하고 있습니다. 나는 봄이 XML 파일을 읽는 방법을 이해하려고 노력하고있다. bean 정의에서 봄이 모호한 조건을 다루는 방법을 이해하려고 노력 중이다.부모가있는 xml에 정의 된 빈에 대해 봄에 생성자를 선택하는 방법은 무엇입니까?

예를

위해 나는 다음과 같이 alarm2.xmlAlarm.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 파일이 있습니다. 이 int이 볼륨으로 이동하고 시간에 갈 것이다하는 즉시 명확하지 않다으로

<?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> 

모호성이있다. 인쇄 할 경우 다음을 얻습니다.

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

그러면 스프링이 호출 할 생성자를 확인하기 위해 XML 파일을 어떻게 읽습니까? 부모님, 콩? 그것은 어딘가에 문서화되어 있습니까?

indexname을 속성으로 지정하는 것과 같은 방법이 있지만 그와 같은 모호한 조건을 처리하는 방법에 대해서도 알고 있어야합니다. 그래서 내가 이것을 묻고 있습니다.

documentation에서

답변

3

,

생성자 인자 분석 대응 (matching)은 인자의 유형을 사용하여 발생합니다. 생성자 인수 의 빈 정의에 잠재적 인 모호성이 없으면 생성자 인수 이 빈 정의에 정의 된 순서는 콩이 일 때 해당 생성자에 인수가 제공되는 순서입니다 인스턴스화.

생성자 선택시 스프링 동작을 설명하는 다음 답변을 발견했습니다.

를 지정하면 생성자, 인수, 인덱스없이 (유형 인수를 일치) 가 호출 될 지정된 인수에 만족 할 수있는 greediest 생성자를

. java.io.File의 경우 이것은 File (String parent, String child) 생성자입니다. 문자열 은 유형에 따라 두 인수가 일치하므로 알고리즘은 해당 생성자를 사용합니다. reference 1 reference 2

부모로부터 상속

는 생성자 인수 (속성 컬렉션을 병합과 동일)이 머지. 귀하의 경우, 병합 아이 빈 생성자 인수 후 인덱스 또는 생성자의 인수 이름을 사용, 모호한 시나리오에 대한

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

될 것입니다.

+0

부모의 특정 'int'가 시간이 아닌 볼륨에 어떻게 할당되었는지는 설명하지 않습니다. 설명해 주시겠습니까? –

+0

합병 언급에 대한 답변을 수정했습니다. –

+0

주셔서 감사합니다.어떻게이 정보를 찾으십니까? –