2012-10-12 63 views
2

我已經寫了一個示例代碼來使用setter方法來實踐Spring Bean注入。 但在我的輸出中,我得到了一個內存地址,而不是我需要的值(在列表元素列表中作爲第一個元素)。Spring Injecting Bean Reference打印內存地址而不是值

我認爲這是由於ref bean =「address1」聲明中的一些錯誤。

欣賞,如果你可以請幫我在correcing這個錯誤

這是輸出我得到

列表元素:[email protected],國王隊的交鋒中,劍的風暴,賞心悅目烏鴉,舞蹈與南鋼] 地址:冬

這是bean類代碼

<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; 
} 

Java集合類`公共類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; 
} 

注意:optionaly你可以在方法的頂部添加@Override。 這有以下好處:

  • 編譯器檢查你確實重寫了一個方法。
  • 其他程序員可以很容易地看到你正在超越一種方法。

即使如此,對於通常重寫方法(如toString())也可能有點重複。

其他重要的方法,通常應該被重寫(但通常被遺忘)等於和toHashCode。由於here解釋的各種原因,重要這些是重要的。

+0

好的。我如何重寫toString()方法以適應你的建議。你能解釋一下怎麼做嗎? – Shan

+0

您只需將該方法添加到您的類public String toString(){...} – dngfng

+0

它的工作。非常感謝 :) – Shan

3

這不是一個內存地址,而不是通常的輸出Object.toString(),這是類名和哈希碼

Spring希望您的List包含String實例,但您試圖添加Address。 Spring只需在Address上調用toString即可使其適合該集合。

您並未聲明List爲參數化的,但我懷疑存在String值對象,例如, <value>Clash of Kings</value>,是領先的春天預計List<String>而不是。

如果您還沒有讀過它,現在可能是閱讀泛型的好時機。

+0

我該如何解決這個問題? – Shan

相關問題