2012-10-12 3 views
2

나는 setter 메소드를 사용하여 Spring Bean Injection을 연습하기위한 샘플 코드를 작성했습니다. 그러나 내 출력에서 ​​필자는 (목록 요소 목록에서 첫 번째 요소로) 필요한 값 대신 메모리 주소를 얻습니다.스프링 주입 빈 참조는 값 대신 메모리 주소를 인쇄합니다.

이것이 ref bean = "address1"선언의 일부 오류 때문인 것 같습니다. 이 오류

을 correcing에서 저를 도와 주실 수 있다면

이 내가 얻을 출력 감사합니다

목록 요소 : [[email protected], 왕들의 충돌, 검의 폭풍 드래곤과, 까마귀 향연, 댄스] 주소 : 윈터

이것은 콩 클래스 코드

<bean id="javaCollection" class="com.springtutorial.JavaCollection"> 
    <property name="addressList"> 
     <list> 
      <ref bean="address1"/> 
      <value>Clash of Kings</value> 
      <value>Storm of Swords</value> 
      <value>Feast for Crows</value> 
      <value>Dance with Dragons</value> 
     </list> 
    </property> 

</bean> 

<bean id="address1" class="com.springtutorial.Address"> 
    <property name="address" value="Winterfell"/> 
</bean> 

public class Address { 

String address; 

public String getAddress() { 
    System.out.println("Address :"+address); 
    return address; 
} 

public void setAddress(String address) { 
    this.address = address; 
} 

자바 컬렉션 클래스`공용 클래스 JavaCollection {

List addressList; 

public List getAddressList() { 
    System.out.println("List Elements: " + addressList); 
    return addressList; 
} 

public void setAddressList(List addressList) { 
    this.addressList = addressList; 
} 

} 

`

메인 클래스가이

public static void main(String[] args) { 

    ApplicationContext ctx = new ClassPathXmlApplicationContext("Beans.xml"); 
    JavaCollection jc = (JavaCollection) ctx.getBean("javaCollection"); 
    Address obj = (Address) ctx.getBean("address1"); 

    jc.getAddressList(); 
    jc.getAddressSet(); 
    jc.getAddressMap(); 
    jc.getAddressProp(); 

    obj.getAddress(); 
}` 

답변

1

Address에서 toString() 메서드를 재정의하지 않았으므로 기본 출력 마녀가 개체 식별자가됩니다.

public String toString() { 

    String stringX = //build String 
    return stringX; 
} 

참고 : 옵션 상단에 @Override를 추가 할 수 있습니다. 이점은 다음과 같습니다.

  • 컴파일러는 실제로 메서드를 재정의하고 있는지 확인합니다.
  • 다른 프로그래머는 당신이 메서드를 오버하는 것을 쉽게 볼 수 있습니다.

그럼에도 불구하고 toString()과 같이 일반적으로 오버 라이드 된 메소드의 경우 조금 중복 될 수 있습니다.

일반적으로 무시 (일반적으로 잊어 버림)해야하는 다른 중요한 방법은 같음 및 toHashCode입니다. here에 설명 된 여러 가지 이유 때문에이를 무시하는 것이 중요합니다.

+0

확인. 내가 제안한대로 toString() 메서드를 재정의하는 방법은 무엇입니까? 어떻게하는지 설명해 주시겠습니까? – Shan

+0

당신은 방금 클래스에 메서드를 추가 public String toString() {...} – dngfng

+0

그것은 효과가있다. 고마워요 :) – Shan

3

처럼이 주소 클래스 코드이 아니다 메모리 주소가 아니라 보통 출력이입니다., 클래스 이름은 , 해시 코드는입니다.

봄에는 ListString 인스턴스가 포함될 것으로 예상되지만 Address을 추가하려고합니다. Spring은 Address에있는 toString을 호출하여 컬렉션에 "적합"하게 만듭니다.

List을 매개 변수화 된 것으로 선언하고 있지는 않지만 String value 객체가 있다고 의심됩니다. 예 : <value>Clash of Kings</value>은 봄을 앞두고 List<String>을 기대하고 있습니다.

아직 읽지 않으 셨다면 지금 제네릭을 읽어 보시기 바랍니다.

+0

이 문제를 어떻게 해결할 수 있습니까? – Shan