Spring: свойство Bean недоступно для записи или имеет неверный метод установки - PullRequest
10 голосов
/ 14 октября 2010

Я экспериментирую с Spring, я слежу за книгой: Spring: записная книжка разработчика.Я получаю эту ошибку:

"Bean property 'storeName' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter?"

.. и я совершенно растерялся.

У меня есть класс ArrayListRentABike, который реализует RentABike:

import java.util.*;

public class ArrayListRentABike implements RentABike {
    private String storeName;
    final List bikes = new ArrayList( );

    public ArrayListRentABike( ) { initBikes( ); }

    public ArrayListRentABike(String storeName) {
        this.storeName = storeName;
        initBikes( );
}

public void initBikes( ) {
    bikes.add(new Bike("Shimano", "Roadmaster", 20, "11111", 15, "Fair"));
    bikes.add(new Bike("Cannondale", "F2000 XTR", 18, "22222", 12, "Excellent"));
    bikes.add(new Bike("Trek", "6000", 19, "33333", 12.4, "Fair"));
}

public String toString( ) { return "RentABike: " + storeName; }

public List getBikes( ) { return bikes; }

public Bike getBike(String serialNo) {
    Iterator iter = bikes.iterator( );
    while(iter.hasNext( )) {
        Bike bike = (Bike)iter.next( );
        if(serialNo.equals(bike.getSerialNo( ))) return bike;
    }
        return null;
    }
}

И мой RentABike-context.xml такой:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

    <bean id="rentaBike" class="ArrayListRentABike">
        <property name="storeName"><value>"Bruce's Bikes"</value></property>
    </bean>

    <bean id="commandLineView" class="CommandLineView">
        <property name="rentaBike"><ref bean="rentaBike"/></property>
    </bean>

</beans>

Есть идеи, пожалуйста?Большое спасибо!Krt_Malta

Ответы [ 3 ]

12 голосов
/ 14 октября 2010

Вы используете инъекцию сеттера, но для атрибута storeName не определен сеттер.Либо добавьте сеттер / геттер для storeName, либо используйте инжектор конструктора.

Поскольку у вас уже есть определенный конструктор, который принимает storeName в качестве ввода, я бы сказал, измените ваш RentABike-context.xml на следующее:

<bean id="rentaBike" class="ArrayListRentABike">
    <constructor-arg index="0"><value>Bruce's Bikes</value></constructor-arg>
</bean>
10 голосов
/ 14 октября 2010

Поскольку параметр, переданный конструктору, инициализирует storeName, вы можете использовать элемент constructor-arg для установки storeName.

<bean id="rentaBike" class="ArrayListRentABike">
    <constructor-arg  value="Bruce's Bikes"/>
</bean>

Элементы constructor-arg позволяют передавать параметрыконструктору (сюрприз, сюрприз) вашего весеннего боба.

0 голосов
/ 25 октября 2017

Эта ошибка возникает из-за того, что storeName не определено для значения решения в:

<bean id="rentaBike" class="ArrayListRentABike">
    <property name="storeName"><value>"Bruce's Bikes"</value></property>
</bean>
...