Spring:Bean属性不可写或具有无效的setter方法

ergxz8rk  于 2023-11-16  发布在  Spring
关注(0)|答案(4)|浏览(155)

我正在尝试Spring,我正在遵循这本书:Spring:A developer's notebook。我得到了这个错误:
第一个月
我完全迷失了方向
我有一个实现RentABikeArrayListRentABike类:

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

u5rb5r59

u5rb5r591#

您正在使用setter注入,但没有为属性storeName定义setter。请为storeName添加setter/getter或使用构造函数注入。
因为你已经定义了一个接受storeName作为输入的构造函数,所以我建议将RentABike-context.xml修改为:

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

字符串

tzxcd3kk

tzxcd3kk2#

由于传递给构造函数的参数将初始化storeName,因此可以使用constructor-arg元素来设置storeName

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

字符串
constructor-arg元素允许将参数传递给spring bean的构造函数(惊喜,惊喜)。

mftmpeh8

mftmpeh83#

发生此错误的原因是没有为解决方案所在的值定义storeName:

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

字符串

4sup72z8

4sup72z84#

在这种类型的错误上,有时还需要检查字段的访问修饰符,如果它是默认值,spring将抛出错误。setter的访问修饰符应该是public的,以便spring可以使用它来设置属性

相关问题