Caused by: org.springframework.beans.NotWritablePropertyException: Invalid property 'helloword' of bean class [HelloBean]: Bean property 'helloword' is not writable or has an invalid setter method. Did you mean 'helloWord'?
at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:751)
at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:608)
at org.springframework.beans.AbstractPropertyAccessor.setPropertyValue(AbstractPropertyAccessor.java:49)
at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:74)
at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:57)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:970)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:729)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:416)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:245)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:141)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:242)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:156)
at SpringDemo.main(SpringDemo.java:15)
源码:beans-config.xml
<bean id="HelloBean"
class="HelloBean">
<property name="helloword">
<value>Hello!</value>
</property>
</bean>
Helloword.java::
public class HelloBean {
private String helloWord;
public String getHelloWord() {
return helloWord;
}
public void setHelloWord(String helloWord) {
this.helloWord = helloWord;
}
}
SpringDemo.java::
public class SpringDemo {
public static void main (String[] args){
Resource rs = new ClassPathResource("beans-config.xml");
BeanFactory factory = new XmlBeanFactory(rs);
HelloBean hello = (HelloBean)factory.getBean("HelloBean");
System.out.println(hello.getHelloWord());
}
}
问题分析:SpringDemo.java 通过BeanFactory读取配置文件,HelloBean的实例依赖于Spring对象,通过setter所保留的接口,使用setter injection完成依赖注入,完成依赖的关系注入;BeanFactory读取Bean的配置设置并完成关系维护后,通过getbean()方法指定Bean的名称来获得Bean实例;需要注意的是:bean-config.xml里的 propery的name属性的值 helloword,需要与HelloBean.java的变量名称一致,才不会报上面的错。