org.springframework.beans.factory.parsing.BeanDefinitionParsingException:Multiple' property'定义

时间:2018-03-27 09:03:51

标签: spring

我是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)

有人可以建议如何实现这个目标吗?

1 个答案:

答案 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可以区分。