我是Spring的新手,并试图熟悉这些概念。我的目的是创建下面提到的类的多个实例。
Item.java
public class Item {
private int itemID;
private String itemName;
public int getItemID() {
return itemID;
}
public void setItemID(int itemID) {
this.itemID = itemID;
}
public String getItemName() {
return itemName;
}
public void setItemName(String itemName) {
this.itemName = itemName;
}
@Override
public String toString() {
return itemName;
}
}
在config.xml中,我试图以下面提到的方式设置属性值。
<bean name="item" class="com.manasa.spring.springcore.task1.Item">
<property name="itemID">
<value>1</value>
</property>
<property name="itemName">
<value>Sandisk Pendrive</value>
</property>
<property name="itemID">
<value>2</value>
</property>
<property name="itemName">
<value>Dell Keyboard</value>
</property>
</bean>
<bean name="cart" class="com.manasa.spring.springcore.task1.ShoppingCart"
p:id="1">
<property name="items">
<map>
<entry key-ref="item">
<value>2</value>
</entry>
<entry key-ref="item">
<value>1</value>
</entry>
</map>
</property>
</bean>
通过这样做,我面临这个问题:
> Exception in thread "main" org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Unexpected failure during bean definition parsing
Offending resource: class path resource [com/manasa/spring/springcore/task1/mapconfig.xml]
Bean 'item'; nested exception is org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Multiple 'property' definitions for property 'itemID'
Offending resource: class path resource [com/manasa/spring/springcore/task1/mapconfig.xml]
Bean 'item'
-> Property 'itemID'
at org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:70)
at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:85)
at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.error(BeanDefinitionParserDelegate.java:308)
at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseBeanDefinitionElement(BeanDefinitionParserDelegate.java:562)
有人可以建议如何实现这个目标吗?
答案 0 :(得分:1)
我想问题出在这里:
<property name="itemID">
<value>1</value>
</property>
<property name="itemName">
<value>Sandisk Pendrive</value>
</property>
<property name="itemID">
<value>2</value>
</property>
<property name="itemName">
<value>Dell Keyboard</value>
</property>
我认为不允许多次为相同属性设置值。当Spring解析此配置时,它实际调用setXXX
(适当的setter),并且不允许在XML配置中为属性重新分配值。
所以你需要删除重复项。结果:
<bean name="item" class="com.manasa.spring.springcore.task1.Item">
<property name="itemID">
<value>1</value>
</property>
<property name="itemName">
<value>Sandisk Pendrive</value>
</property>
</bean>
如果您需要多个实例(更多Item
个对象),则需要创建更多bean(添加更多<bean> ... </bean>
个部分)。 E.g。
<bean id="someOtherInstance" name="someOtherInstance" class="com.manasa.spring.springcore.task1.Item">
<property name="itemID">
<value>123</value>
</property>
<property name="itemName">
<value>Some Other Value</value>
</property>
</bean>
请记住,您需要为它们提供不同的ID(名称),以便Spring可以区分。