복붙노트

[SPRING] 스프링 오버로드 된 생성자 삽입

SPRING

스프링 오버로드 된 생성자 삽입

이것은 코드입니다 :

public class Triangle {


private String color;
private int height;


public Triangle(String color,int height){
    this.color = color;
    this.height = height;
}

public Triangle(int height ,String color){
    this.color = color;
    this.height = height;
}

public void draw() {
    System.out.println("Triangle is drawn , +
            "color:"+color+" ,height:"+height);
}

}

Spring 구성 파일은 다음과 같습니다.

 <bean id="triangle" class="org.tester.Triangle">
    <constructor-arg value="20" />
    <constructor-arg value="10" />
</bean>

어떤 생성자가 Spring에 의해 호출 될지 결정하는 특정 규칙이 있습니까?

해결법

  1. ==============================

    1.여기서 첫 번째 인수는 각 메소드의 첫 번째 매개 변수와 일치하고 매개 변수가 일치합니다.

    여기서 첫 번째 인수는 각 메소드의 첫 번째 매개 변수와 일치하고 매개 변수가 일치합니다.

    모호성을 제거하는 데 도움이되는 아래 해결책을 제안합니다.

    첫 번째 생성자를 호출하려면

    <bean id="triangle" class="org.tester.Triangle">
    <constructor-arg type="int"  value="20" />
    <constructor-arg type="java.lang.String"  value="10" />
    </bean>
    

    두 번째 생성자를 호출하려면

    <bean id="triangle" class="org.tester.Triangle">
        <constructor-arg type="java.lang.String"value="20" />
        <constructor-arg   type="int"  value="10" />
    </bean>
    

    그래서 그 모호함을 해결합니다.

    편집하다 :-

    이 문제에 대한 자세한 내용은 여기를 참조하십시오.

  2. ==============================

    2.나는 그렇게 믿지 않는다. 다음과 같이 인수를 입력 할 수 있습니다.

    나는 그렇게 믿지 않는다. 다음과 같이 인수를 입력 할 수 있습니다.

    <bean id="triangle" class="org.tester.Triangle">
        <constructor-arg type="int" value="20" />
        <constructor-arg value="10" />
    </bean>
    

    이 시나리오에서 혼동을 제거 할 수 있습니다.

  3. ==============================

    3.Spring 3.1.0에 대한 테스트에 기초하여, 두 번째 생성자가 사용될 것이다. 나는 왜 문서가 확실한 답을주지 않았는 지 모른다.

    Spring 3.1.0에 대한 테스트에 기초하여, 두 번째 생성자가 사용될 것이다. 나는 왜 문서가 확실한 답을주지 않았는 지 모른다.

    Bitbucket 코드 테스트하려면 Main 클래스를 실행하여 Triangle 객체를 만드는 데 사용할 생성자에 따라 FIRST 또는 SECOND 문자열을 출력합니다.

  4. from https://stackoverflow.com/questions/13864787/spring-overloaded-constructor-injection by cc-by-sa and MIT license