1、错误提示:
Error setting property values:说找不到Printer中的设置属性值,然后去看一下,配置文件
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'printer' defined in class path resource [applicationContext.xml]: Error setting property values; nested exception is org.springframework.beans.NotWritablePropertyException: Invalid property 'ink' of bean class [myprinter.Printer]: Bean property 'ink' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter?
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1685)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1400)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:575)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:498)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1083)
at myspring.testHelloSpring.main(testHelloSpring.java:21)
Caused by: org.springframework.beans.NotWritablePropertyException: Invalid property 'ink' of bean class [myprinter.Printer]: Bean property 'ink' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter?
at org.springframework.beans.BeanWrapperImpl.createNotWritablePropertyException(BeanWrapperImpl.java:243)
at org.springframework.beans.AbstractNestablePropertyAccessor.processLocalProperty(AbstractNestablePropertyAccessor.java:426)
at org.springframework.beans.AbstractNestablePropertyAccessor.setPropertyValue(AbstractNestablePropertyAccessor.java:278)
at org.springframework.beans.AbstractNestablePropertyAccessor.setPropertyValue(AbstractNestablePropertyAccessor.java:266)
at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:97)
at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:77)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1681)
... 9 more
2、配置文件内容:
配置文件中显示,id="printer"下,有两个属性值,分别是:ink与paper。找不到这两个值,说明:Printer类中没有进行设置。然后,找到Printer类:
<!-- Printer -->
<bean id="colorInk" class="myprinter.ColorInk"/>
<bean id="greyInk" class="myprinter.GreyInk"/>
<bean id="a4Paper" class="myprinter.TextPaper">
<property name="charPerline" value="10"/>
<property name="linePerPage" value="8"/>
</bean>
<bean id="b5Paper" class="myprinter.TextPaper">
<property name="charPerLine" value="6"/>
<property name="LinePerPage" value="5"/>
</bean>
<bean id="printer" class="myprinter.Printer">
<property name="ink" ref="colorInk"/>
<property name="paper" ref="b5Paper"/>
</bean>
3、Printer类:
发现有两个变量,没有对其进行setter与getter,这两个方法恰巧是配置文件用来进行获取值得方法,也可以说进行了方法注入。
package myprinter;
public class Printer {
private Ink ink=null;
private Paper paper=null;
public void print(String str) {
System.out.println("使用"+ink.getColor(255, 200, 0)+"颜色打印:\n");
for(int i=0;i<str.length();++i) {
paper.putInChar(str.charAt(i));
}
System.out.println(paper.getContent());
}
}
所以,补全方法实现:
package myprinter;
public class Printer {
private Ink ink=null;
private Paper paper=null;
public void print(String str) {
System.out.println("使用"+ink.getColor(255, 200, 0)+"颜色打印:\n");
for(int i=0;i<str.length();++i) {
paper.putInChar(str.charAt(i));
}
System.out.println(paper.getContent());
}
public Ink getInk() {
return ink;
}
public void setInk(Ink ink) {
this.ink = ink;
}
public Paper getPaper() {
return paper;
}
public void setPaper(Paper paper) {
this.paper = paper;
}
}
最后,便可以进行实现了。
使用#ffc800颜色打印:
jdkddn
mbfjkd
sbskjd
hsjkhf
djkhlk
==第1页==
hflkhd
fkljhk
alncxj
skhsjf
dskjdh
==第2页==
a.lkfh
jlkahn
jflkan
knfkfk
jkfjkl
==第3页==
dkjsld
jlakcn
jkanck
lcahd;
;;;;;;
==第4页==
;fklnc
mxznmz
,n,.zm
jiklas
djiaon
==第5页==
akljkl
hjlhca
jcnlkn
la;/hj
agshyd
==第6页==
gayuuw
qloetg
sywqiu
wujghb
ljksah
==第7页==
uahis;
hy;aso
du;oui
opwd
==第8页==