Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring注入Bean引用打印内存地址而不是值_Java_Spring_Javabeans - Fatal编程技术网

Java Spring注入Bean引用打印内存地址而不是值

Java Spring注入Bean引用打印内存地址而不是值,java,spring,javabeans,Java,Spring,Javabeans,我已经编写了一个示例代码来使用setter方法练习Springbean注入。 但在我的输出中,我得到了一个内存地址,而不是列表元素列表中作为第一个元素所需要的值 我认为这是由于refbean=address1声明中的一些错误造成的 如果你能帮我纠正这个错误,我将不胜感激 这是我得到的输出 列表元素:[com.springtutorial。Address@1b6101e,国王的冲突,剑的风暴,乌鸦的盛宴,与龙共舞] 地址:临冬城 这是Bean类代码 <bean id="javaCollect

我已经编写了一个示例代码来使用setter方法练习Springbean注入。 但在我的输出中,我得到了一个内存地址,而不是列表元素列表中作为第一个元素所需要的值

我认为这是由于refbean=address1声明中的一些错误造成的

如果你能帮我纠正这个错误,我将不胜感激

这是我得到的输出

列表元素:[com.springtutorial。Address@1b6101e,国王的冲突,剑的风暴,乌鸦的盛宴,与龙共舞] 地址:临冬城

这是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();
}`

这不是内存地址,而是Object.toString的常规输出,它是类名和哈希代码

Spring希望您的列表包含字符串实例,但您正在尝试添加地址。Spring只需调用地址上的toString,使其适合于集合

您并没有将列表声明为参数化的,但我怀疑字符串值对象的存在,例如Clash of Kings,会导致Spring期望一个列表


如果您还没有阅读过它,现在可能是阅读泛型的好时机。

这不是内存地址,而是Object.toString的常规输出,它是类名和哈希代码

Spring希望您的列表包含字符串实例,但您正在尝试添加地址。Spring只需调用地址上的toString,使其适合于集合

您并没有将列表声明为参数化的,但我怀疑字符串值对象的存在,例如Clash of Kings,会导致Spring期望一个列表


如果您还没有阅读过它,现在可能是阅读泛型的好时机。

这是因为您没有覆盖Address中的toString方法,因此您将获得默认输出,即对象标识符

public String toString() {

    String stringX = //build String
    return stringX;
}
注意:您可以选择在方法的顶部添加@Override-。 这有以下好处:

编译器检查您是否真的重写了一个方法。 其他程序员可以很容易地看出,您对方法的评价过高。 即使如此,对于常见的重写方法(如toString),它也可能有点冗余


通常应该重写但通常被忘记的其他重要方法是equals和toHashCode。重写这些方法很重要,原因如下。

这是因为您没有重写Address中的toString方法,因此您将获得默认输出,即对象标识符

public String toString() {

    String stringX = //build String
    return stringX;
}
注意:您可以选择在方法的顶部添加@Override-。 这有以下好处:

编译器检查您是否真的重写了一个方法。 其他程序员可以很容易地看出,您对方法的评价过高。 即使如此,对于常见的重写方法(如toString),它也可能有点冗余


其他通常应该被重写但通常被忘记的重要方法是equals和toHashCode。由于各种原因,重写这些方法很重要。

好的。我如何重写toString方法以适应您的建议。您能解释一下如何做吗?您只需将该方法添加到类public String toStri中即可ng{…}好的。我如何重写toString方法以适应您的建议。您能解释一下如何做吗?您只需将该方法添加到类公共字符串toString{…}