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